50 lines
953 B
JavaScript
50 lines
953 B
JavaScript
|
var minus = "-".charCodeAt(0);
|
||
|
var plus = "+".charCodeAt(0);
|
||
|
var dot = ".".charCodeAt(0);
|
||
|
var exp = "e".charCodeAt(0);
|
||
|
var EXP = "E".charCodeAt(0);
|
||
|
|
||
|
module.exports = function(value) {
|
||
|
var pos = 0;
|
||
|
var length = value.length;
|
||
|
var dotted = false;
|
||
|
var sciPos = -1;
|
||
|
var containsNumber = false;
|
||
|
var code;
|
||
|
|
||
|
while (pos < length) {
|
||
|
code = value.charCodeAt(pos);
|
||
|
|
||
|
if (code >= 48 && code <= 57) {
|
||
|
containsNumber = true;
|
||
|
} else if (code === exp || code === EXP) {
|
||
|
if (sciPos > -1) {
|
||
|
break;
|
||
|
}
|
||
|
sciPos = pos;
|
||
|
} else if (code === dot) {
|
||
|
if (dotted) {
|
||
|
break;
|
||
|
}
|
||
|
dotted = true;
|
||
|
} else if (code === plus || code === minus) {
|
||
|
if (pos !== 0) {
|
||
|
break;
|
||
|
}
|
||
|
} else {
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
pos += 1;
|
||
|
}
|
||
|
|
||
|
if (sciPos + 1 === pos) pos--;
|
||
|
|
||
|
return containsNumber
|
||
|
? {
|
||
|
number: value.slice(0, pos),
|
||
|
unit: value.slice(pos)
|
||
|
}
|
||
|
: false;
|
||
|
};
|