大于0且能包含小数的正则表达式,屏蔽00和0.0等

开发过程中遇到涉及金额的数字,金额要求是大于0的数,可以包括小数。所以也就能包含0.5,0.50,0.01,1.01等等这样的数字。
要写一个正则判断用户输入的金额是否合法,在网上找了很多正则,都没办法满足,网上大多数正则没办法过滤掉像:0、00、001、0.0、01.1、01.0等,有的还会屏蔽0.50这些类似数字,大家可以先自测一下。

所以最后捡起来几乎快忘掉的正则,自己写了一个:

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

自测是能够正常的输入大于0(包括像0.10,0.01,且屏蔽像00,0.0,001,01.0,01.1等)的数。
最后补上解析:

/^([1-9]\d*(\.\d*[1-9][0-9])?)|(0\.\d*[1-9][0-9])|(0\.\d*[1-9])$/
解析: 
/
^ //匹配开头
[1-9] //表示第一个数为1~9中的任意一个(不能为0开头,0开头的在后半部分):匹配1~9
\d*  //表示0-9的任意一个数字,可以为多位数 :匹配除开头数字外的整数部分
(\.\d*)? //表示跟小数点,以及任意数字:匹配小数点,以及小数点后面可以为任意数
| //表示选择,即“或”,第二种可能
0\.\d*[1-9][0-9] //表示以0开头,后面接小数点,小数点后面第一位数在1~9之间,第二位数可以在0~9之间
| //表示选择,即“或”,第三种可能
0\.\d*[1-9] 表示以0开头,后面接小数点,小数点后面只有一位不为0的数
$ //匹配结尾
/

一边测试一边解析,发现单靠上面好像不能过滤掉汉字或者标点符号那些,我是项目里面还有封装的校验,如果是input框,type设置为number应该就可以了,还是需要多测试。

整理的有点匆忙,有不足的欢迎提出,后续修改!

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值