题目
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。
思路
字符串从头遍历到尾是一种方法,但是存在许多特判。所以我们将字符串切割,以(A.B E/e A)的格式为准
其中A是带符号的整数,B是不带符号的整数
切割之后再对字符串的部分分开判断即可
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| function isNumeric (s) { let epos = s.search(/[e | E]/) if (epos !== -1) { let epart = s.substring(epos + 1) if (epart.length === 0) return false let dotpos = epart.indexOf('.') if (dotpos !== -1) return false } if (epos !== -1) s = s.substring(0, epos) let dotpos = s.indexOf('.') if (dotpos !== -1) { return isInteger(s.substring(0, dotpos)) && isInteger(s.substring(dotpos + 1)) } else { return isInteger(s) } } function isInteger (s) { let opnumber = 0 for (let i = 0; i < s.length; i++) { if (s[i] === '+' || s[i] === '-') opnumber++ } if (opnumber > 1) return false else if (opnumber === 1) s = s.substring(1) for (let i = 0; i < s.length; i++) { if (isNaN(s[i])) { return false } } return true }
|