首先数字匹配是一定的 整数或小数,但是网上找到的匹配正则大都不能过滤如下情况:
允许是 0.0 或 0
谢谢大家了~
1
AX5N 2019-05-08 00:04:04 +08:00
你是不允许首字母是 0 吗?那写成两段不就得了,0 开头和非 0 开头的,用「或」连接
|
3
weixiangzhe 2019-05-08 00:15:47 +08:00
/^([1-9]\d*|0)(\.\d+)?$/
|
4
weixiangzhe 2019-05-08 00:20:52 +08:00
|
5
cydysm 2019-05-08 02:37:53 +08:00 via iPhone
@weixiangzhe 这个网站下面的流程图棒!
|
6
lastpass 2019-05-08 08:45:15 +08:00 via Android 1
→_→你先.number 不就好?
|
7
lastpass 2019-05-08 08:48:49 +08:00 via Android 1
在校验之前先转换为标准的数字类型。
不要拿个字符串就来正则匹配。 →_→你说的这些问题就不根本不存在。 |
8
palmers OP @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 麻烦您了 |
9
palmers OP @lastpass 我需求是这样的,input 中输入, 如果不是空字符, 就会进行校验,在 onChange 中,不允许用户输入不符合规则的字符 比如非数字(.除外) , 0 后面紧跟着是数字等
|
10
imdong 2019-05-08 10:06:05 +08:00
|
11
lastpass 2019-05-08 11:08:09 +08:00 via Android
回复 @palmers 是哒,你加个 .number 修饰符就好呀。用户在输入的非数字字符会直接忽略的。对应这些校验。还是推荐 async-validator,像这种数字校验,直接
{ required: true, message: '不能为空'}, { type: 'number', message: '必须为数字值'} 就好。 |
13
palmers OP @lastpass 我刚查了一下 您说的这个是 vue 的 **.number 啊? 我没有使用 vue 是 react 也是第一次使用 react 所以也不清楚 rect 有没有这个修饰符, 目前我没有知道对应资料 显示 react 有在 jsx 上支持**.number 修饰符
|
14
weixiangzhe 2019-05-08 11:22:56 +08:00
@palmers 你多了个框号
/^(?:[1-9]\d{0,1}|0)(?:\.\d{0,2})?$/ https://regexper.com/#%2F%5E%28%3F%3A%5B1-9%5D%5Cd%7B0%2C1%7D%7C0%29%28%3F%3A%5C.%5Cd%7B0%2C2%7D%29%3F%24%2F |
15
jinhan13789991 2019-05-08 11:32:22 +08:00
你应该给出待匹配的文本,然后我们才好针对做处理啊~
|
16
lastpass 2019-05-08 11:48:13 +08:00 via Android
@palmers 一样哒,.number 就是 parseInt/Float(value)呀。如果没有,自己就多写一行代码啦( • ̀ω•́ )✧
|
17
palmers OP @weixiangzhe 好的 非常感谢!
|
18
cpdyj0 2019-05-08 12:27:23 +08:00
推荐下这个工具 https://regex101.com
还可以 debug,优化 |
20
imdong 2019-05-08 14:24:20 +08:00
|
21
SakuraKuma 2019-05-08 14:34:36 +08:00
为啥, 要用正则?
input[type=number][step=0.01] |
23
palmers OP @SakuraKuma 您说的这个我不懂, 我不是的前端开发 看不明白您这个
|