|
var minus = '-'.charCodeAt(0) |
|
var plus = '+'.charCodeAt(0) |
|
var dot = '.'.charCodeAt(0) |
|
var exp = 'e'.charCodeAt(0) |
|
var EXP = 'E'.charCodeAt(0) |
|
|
|
|
|
|
|
function likeNumber(value) { |
|
var code = value.charCodeAt(0) |
|
var nextCode |
|
|
|
if (code === plus || code === minus) { |
|
nextCode = value.charCodeAt(1) |
|
|
|
if (nextCode >= 48 && nextCode <= 57) { |
|
return true |
|
} |
|
|
|
var nextNextCode = value.charCodeAt(2) |
|
|
|
if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) { |
|
return true |
|
} |
|
|
|
return false |
|
} |
|
|
|
if (code === dot) { |
|
nextCode = value.charCodeAt(1) |
|
|
|
if (nextCode >= 48 && nextCode <= 57) { |
|
return true |
|
} |
|
|
|
return false |
|
} |
|
|
|
if (code >= 48 && code <= 57) { |
|
return true |
|
} |
|
|
|
return false |
|
} |
|
|
|
|
|
|
|
module.exports = function (value) { |
|
var pos = 0 |
|
var length = value.length |
|
var code |
|
var nextCode |
|
var nextNextCode |
|
|
|
if (length === 0 || !likeNumber(value)) { |
|
return false |
|
} |
|
|
|
code = value.charCodeAt(pos) |
|
|
|
if (code === plus || code === minus) { |
|
pos++ |
|
} |
|
|
|
while (pos < length) { |
|
code = value.charCodeAt(pos) |
|
|
|
if (code < 48 || code > 57) { |
|
break |
|
} |
|
|
|
pos += 1 |
|
} |
|
|
|
code = value.charCodeAt(pos) |
|
nextCode = value.charCodeAt(pos + 1) |
|
|
|
if (code === dot && nextCode >= 48 && nextCode <= 57) { |
|
pos += 2 |
|
|
|
while (pos < length) { |
|
code = value.charCodeAt(pos) |
|
|
|
if (code < 48 || code > 57) { |
|
break |
|
} |
|
|
|
pos += 1 |
|
} |
|
} |
|
|
|
code = value.charCodeAt(pos) |
|
nextCode = value.charCodeAt(pos + 1) |
|
nextNextCode = value.charCodeAt(pos + 2) |
|
|
|
if ( |
|
(code === exp || code === EXP) && |
|
((nextCode >= 48 && nextCode <= 57) || |
|
((nextCode === plus || nextCode === minus) && nextNextCode >= 48 && nextNextCode <= 57)) |
|
) { |
|
pos += nextCode === plus || nextCode === minus ? 3 : 2 |
|
|
|
while (pos < length) { |
|
code = value.charCodeAt(pos) |
|
|
|
if (code < 48 || code > 57) { |
|
break |
|
} |
|
|
|
pos += 1 |
|
} |
|
} |
|
|
|
return { |
|
number: value.slice(0, pos), |
|
unit: value.slice(pos), |
|
} |
|
} |
|
|