我使用此preg_match
条件来匹配正值,负值和小数值
/^[0-9,-\.]{1,50}$/
但是当我输入-34.000时它没有显示错误,当我输入34 ... 9868时它没有显示错误, 我想要的是它必须只接受正,负和十进制值。
答案 0 :(得分:4)
如果您需要检查它是否为数字,请使用is_numeric()
之类的内容。
你的正则表达式完全崩溃了,因为现在它甚至只能接受一个包含50个点的字符串
答案 1 :(得分:4)
如上所述,有更好的方法可以检测给定的输入字符串是否为数值。如果您想坚持使用正则表达式,以下内容可能适合您:
/^-?[0-9]+(?:\.[0-9]+)?$/
说明:
^
)-
字符(-?
); ?
表示“不需要”[0-9]+
)(?:...)?
); ?:
表示“不捕获子模式”
\.
); .
由于其特殊功能而需要进行转义[0-9]+
)$
)答案 2 :(得分:2)
您需要拆分正则表达式,以便它只接受正确位置的字符。例如:
/^[+\-]?([0-9]+,)*[0-9]+(\.[0-9]+)?$/
解释这个表达式:
[+\-]?
:这会检查数字的+或 - 前缀。它完全是可选的,但只能是+或 - 。
([0-9]+,)*
:这允许一组可选的逗号分隔数字。这是成千上万的等等。
[0-9]+
:这要求该值至少包含一些数字
(\.[0-9]+)?
:最后,这允许带有尾随数字的可选小数点。
答案 3 :(得分:0)
试试这个正则表达式^-?\d*\.?\d+$
我想它不能限于50个字符