我试图"验证"来自后端表单的一些输入,但我有点坚持所需的正则表达式。基本上,我想得到一个数字,没有前导零,带有可选的十进制和一个可选的不区分大小写的千位符号(1,000 = 1k,1,000,000 = 1m,10亿= 1b ...) 这些应匹配/验证:
12.39 12.389k 99.1003b 40.1m
这些应该失败。
0.0 12.00b 1e3 2^5 0xFF 12.6z asdf
到目前为止,我已经尝试过这个:
^[1-9]\d*(?:\.\d+)?(?:[kmbt])?$
它有效,但我想也许有人能比我更优雅地解决这个问题。
答案 0 :(得分:1)
[编辑]没有千位分隔符:
/^(?:[1-9][0-9]*(?:\.[0-9]*[1-9])?|0\.[0-9]*[1-9])[kbmt]?$/i
[旧答案]千分隔符:
你可以用:
/^(?:[1-9][0-9]{0,2}(?:(,?)[0-9]{3})?(?:\1[0-9]{3})*(?:\.[0-9]*[1-9])?|0\.[0-9]*[1-9])[kbmt]?$/i
细节:
^
(?: # numbers >= 1
[1-9][0-9]{0,2}
(?:(,?)[0-9]{3})? # capture an eventual thousand separator
(?:\1[0-9]{3})*
# decimal
(?:\.[0-9]*[1-9])?
| # numbers < 1
0\.[0-9]*[1-9]
)[kbmt]?$
答案 1 :(得分:0)
在REGEX中更新。
在regex下面不会导致零允许特殊字符和字符而没有指定表示法。
在正则表达式下面将允许带有千位和其他表示法的十进制和整数。
^[1-9]\d*(\.[0-9]+)?(?:[kmbtKMBT])?$
答案 2 :(得分:0)