JavaScript验证输入的string的内容是不是数值

JavaScript验证输入的string的内容是不是数值

JavaScript里面对Number的支持

Number是JavaScript的一个内置的对象,有很多method可以直接使用。在使用JavaScript验证一个值是不是数值的问题中,我们可能用到的两个method是:

  1. Number.parseInt()
  2. Number.parseFloat()

以下是这两个method的几个简单的用法:

// example from https://www.bennadel.com/blog/2012-exploring-javascript-s-parseint-and-parsefloat-functions.htm
// parseInt
Number.parseInt( "123" ); //123
Number.parseInt( "123.456" ); //123
Number.parseInt( "+123.456" ); //123
Number.parseInt( "-123.456" ); //-123
Number.parseInt( "123ABC" ); //123
Number.parseInt( "ABC" ); //NaN
Number.parseInt( "5px 5px" ); //5
Number.parseInt( "(123)" ); //NaN
Number.parseInt( "0xF" ); //15
Number.parseInt( "012" ); //10
Number.parseInt( " 123 " ); //123

// parseFloat
Number.parseFloat( "123" ); //123
Number.parseFloat( "123.456" ); //123.456
Number.parseFloat( "+123.456" ); //123.456
Number.parseFloat( "-123.456" ); //-123.456
Number.parseFloat( "123ABC" ); //123
Number.parseFloat( "ABC" ); //NaN
Number.parseFloat( "5px 5px" ); //5
Number.parseFloat( "(123)" ); //NaN
Number.parseFloat( "0xF" ); //0
Number.parseFloat( "012" ); //12
Number.parseFloat( " 123 " ); //123

从上面的例子可以看到,Number.parseInt()和Number.parseFloat()虽然可以把string转化成对就的数值,但是这个转化过程不是exactly的转化,所以如果我们在验证中使用会造成很大的迷惑。

考虑直接使用第三方库

函数式编程的流行,促使了很多优秀的第三方工具库的出现,这些大大地减少了我们在开发中的工作量,也一定程度上提高了我们代码的质量。在JavaScript中,我列举两个:

  1. Lodash
  2. Ramda

在Ramda中只有R.is来判断类型,没有想要的函数。

在lodash中有_.parseInt,使用与Number.parseInt基本相同。其中的_.isNumber也不能满足需求。

使用Regrex验证

最终,还是使用了Regrex解决了业务需求。以下是最后的Regrex:

/^0$|^[+-]?[1-9]\d*(\.\d+)?$/

/^0$|^[+-]?[1-9]\d*(\.\d+)?$/.test("2"); //true
/^0$|^[+-]?[1-9]\d*(\.\d+)?$/.test("+2"); //true
/^0$|^[+-]?[1-9]\d*(\.\d+)?$/.test("-2"); //true
/^0$|^[+-]?[1-9]\d*(\.\d+)?$/.test("2.1"); //true
/^0$|^[+-]?[1-9]\d*(\.\d+)?$/.test("+2.1"); //true
/^0$|^[+-]?[1-9]\d*(\.\d+)?$/.test("-2.1"); //true
/^0$|^[+-]?[1-9]\d*(\.\d+)?$/.test("abc"); //false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值