活跃农民
- 积分
- 507
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2013-6-5
- 最后登录
- 1970-1-1
|
0613 2. Valid Number
/**
* @param {string} s
* @return {boolean}
*/
var isNumber = function(s) {
// first, trim
if (!s) {return false}
s = s.trim()
if (!s) {return false}
const range = /[^0-9e.+-]/
// no other characters
if (range.test(s)) {
return false
}
// no more than one dot or e
let dot = 0
let exp = 0
for (let c of s) {
if (c === '.') {dot++}
if (c === 'e') {exp++}
}
if (exp > 1 || dot > 1) {
return false
}
// if has e, split by e, check both sides not empty
// first, +-000#.#
// second, +-000#
const test = (str, withDot) => {
if (!str) { return false }
if (['+', '-'].includes(str[0])) {
str = str.slice(1)
}
// nore more +-
if (/[+-]/.test(str)) {
return false
}
if (withDot) {
if (str === '.') {
return false
}
} else {
if (str.includes('.')) {
return false
}
}
if (!str) {
return false
}
return true
}
if (s.includes('e')) {
let [one, two] = s.split('e')
if (!test(one, true) || !test(two, false)) {
return false
}
} else {
if (!test(s, true)) {
return false
}
}
return true
};
console.log(isNumber('0') === true)
console.log(isNumber('0.1') === true)
console.log(isNumber('abc') === false)
console.log(isNumber('1 a') === false)
console.log(isNumber('2e10') === true)
// my test cases
console.log(isNumber('000000') === true)
console.log(isNumber('+0') === true)
console.log(isNumber('-0e-0') === true)
console.log(isNumber(' -0e-0 ') === true)
console.log(isNumber(' 000-0e-0 ') === false)
console.log(isNumber(' -0.4e004 ') === true)
console.log(isNumber(' e ') === false)
console.log(isNumber(' -4.e0 ') === true)
console.log(isNumber(' -4.e ') === false)
console.log(isNumber(' e5 ') === false)
|
|