正则表达式求助,校验合法小数或整数, 需要排除情况如下

2019-05-07 23:36:28 +08:00
 palmers

首先数字匹配是一定的 整数或小数,但是网上找到的匹配正则大都不能过滤如下情况:

允许是 0.0 或 0

谢谢大家了~

3101 次点击
所在节点    程序员
23 条回复
AX5N
2019-05-08 00:04:04 +08:00
你是不允许首字母是 0 吗?那写成两段不就得了,0 开头和非 0 开头的,用「或」连接
palmers
2019-05-08 00:07:05 +08:00
@AX5N 我正则一塌糊涂 能麻烦您把正则写出来吗?
weixiangzhe
2019-05-08 00:15:47 +08:00
/^([1-9]\d*|0)(\.\d+)?$/
weixiangzhe
2019-05-08 00:20:52 +08:00
cydysm
2019-05-08 02:37:53 +08:00
@weixiangzhe 这个网站下面的流程图棒!
lastpass
2019-05-08 08:45:15 +08:00
→_→你先.number 不就好?
lastpass
2019-05-08 08:48:49 +08:00
在校验之前先转换为标准的数字类型。
不要拿个字符串就来正则匹配。
→_→你说的这些问题就不根本不存在。
palmers
2019-05-08 09:47:19 +08:00
@weixiangzhe 非常感谢! 您给的地址挺好用的 很清晰 对我很有帮助 我需要匹配整数位和小数位最多 n 位,n 是动态可调整的 所以我改了一下,不知道对不对, 麻烦您帮我看一下:
/^(?:([1-9]\d{0,1}|0))(?:\.\d{0,2})?$/
上面正则可以匹配:
0. 整数 0
1. 整数 20, 20.0
2. 小数 整数部分和小数部分分别最多 2 位 20.20 , 0.01, 12.22

麻烦您了
palmers
2019-05-08 09:51:36 +08:00
@lastpass 我需求是这样的,input 中输入, 如果不是空字符, 就会进行校验,在 onChange 中,不允许用户输入不符合规则的字符 比如非数字(.除外) , 0 后面紧跟着是数字等
imdong
2019-05-08 10:06:05 +08:00
https://regex101.com/r/9mvoSw/1
楼主看下这个正则表达式符合不


^(?!0[0-9])[0-9]+(\.(?>[0-9])[0-9]{0,5})?$
lastpass
2019-05-08 11:08:09 +08:00
回复 @palmers 是哒,你加个 .number 修饰符就好呀。用户在输入的非数字字符会直接忽略的。对应这些校验。还是推荐 async-validator,像这种数字校验,直接
{ required: true, message: '不能为空'},
{ type: 'number', message: '必须为数字值'}
就好。
palmers
2019-05-08 11:13:20 +08:00
@imdong 可是 js 不支持 ?>
palmers
2019-05-08 11:20:35 +08:00
@lastpass 我刚查了一下 您说的这个是 vue 的 **.number 啊? 我没有使用 vue 是 react 也是第一次使用 react 所以也不清楚 rect 有没有这个修饰符, 目前我没有知道对应资料 显示 react 有在 jsx 上支持**.number 修饰符
weixiangzhe
2019-05-08 11:22:56 +08:00
jinhan13789991
2019-05-08 11:32:22 +08:00
你应该给出待匹配的文本,然后我们才好针对做处理啊~
lastpass
2019-05-08 11:48:13 +08:00
@palmers 一样哒,.number 就是 parseInt/Float(value)呀。如果没有,自己就多写一行代码啦( • ̀ω•́ )✧
palmers
2019-05-08 12:23:06 +08:00
@weixiangzhe 好的 非常感谢!
cpdyj0
2019-05-08 12:27:23 +08:00
推荐下这个工具 https://regex101.com
还可以 debug,优化
palmers
2019-05-08 12:41:05 +08:00
@cpdyj0 上面的 ver @imdong 给的就是这个工具 挺好用的 谢谢~
imdong
2019-05-08 14:24:20 +08:00
@palmers 试一下我发的 Version 3 经过测试 是可以 js 跑的了.

^(?:0|[1-9][0-9]*)(?:\.[0-9]{1,5})?$

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/562012

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX