我想检查一个 "字符串 "是否只包含数字。我使用了这个方法。
var isANumber = isNaN(theValue) === false;
if (isANumber){
..
}
但我发现它也允许 "+"和"-"。基本上,我想确保一个输入'只包含数字,没有其他字符。由于
+100和
-5都是数字,
isNaN()`不是正确的方法。
也许我需要的是一个regexp?有什么建议吗?
这里有另一种有趣的、可读的方法来检查一个字符串是否只包含数字。
这个方法的工作原理是使用[spread运算符][1]将字符串分割成一个数组,然后使用[every()
][2]方法来测试数组中的所有元素(字符)是否[包含][3]在数字字符串'0123456789'
中。
<!--开始片段。 js hide: false console: true babel.false --> -- begin snippet: js hide: false console: true false -->
const digits_only = string => [...string].every(c => '0123456789'.includes(c));
console.log(digits_only('123')); // true
console.log(digits_only('+123')); // false
console.log(digits_only('-123')); // false
console.log(digits_only('123.')); // false
console.log(digits_only('.123')); // false
console.log(digits_only('123.0')); // false
console.log(digits_only('0.123')); // false
console.log(digits_only('Hello, world!')); // false
[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax [2]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every [3]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
function isNumeric(x) {
return parseFloat(x).toString() === x.toString();
}
尽管这将会对带前导或尾部为零的字符串返回 "false"。