PHP - 正则数字,可选小数和字母

时间:2016-10-14 12:39:35

标签: php regex

我试图"验证"来自后端表单的一些输入,但我有点坚持所需的正则表达式。基本上,我想得到一个数字,没有前导零,带有可选的十进制和一个可选的不区分大小写的千位符号(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])?$

它有效,但我想也许有人能比我更优雅地解决这个问题。

3 个答案:

答案 0 :(得分:1)

[编辑]没有千位分隔符:

/^(?:[1-9][0-9]*(?:\.[0-9]*[1-9])?|0\.[0-9]*[1-9])[kbmt]?$/i

demo

[旧答案]千分隔符:

你可以用:

/^(?:[1-9][0-9]{0,2}(?:(,?)[0-9]{3})?(?:\1[0-9]{3})*(?:\.[0-9]*[1-9])?|0\.[0-9]*[1-9])[kbmt]?$/i

demo

细节:

^
(?: # 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])?$

请查看工作演示:http://www.regexpal.com/?fam=95995

答案 2 :(得分:0)

以下内容应该是您之后的内容:

12.00b

它匹配departments但是...... Here就是它的一个例子。

第1组将包含您的完全匹配。