我希望用户只输入0-9而且只能输入一次“。”
patt = /[^0-9(.{1})]/
1.2222 -> true
1.2.2 -> false (only once '.')
帮助我,谢谢!
答案 0 :(得分:21)
/^-?(?:\d+|\d*\.\d+)$/
这匹配普通花车,例如3.14
,仅限小数部分的缩写,例如.5
和整数,例如9
以及负数。
答案 1 :(得分:18)
这就是你要找的东西
$re = "~ #delimiter
^ # start of input
-? # minus, optional
[0-9]+ # at least one digit
( # begin group
\. # a dot
[0-9]+ # at least one digit
) # end of group
? # group is optional
$ # end of input
~xD";
这只接受“123”或“123.456”,而不是“.123”或“14e + 15”。如果您还需要这些表单,请尝试is_numeric
答案 2 :(得分:7)
正则表达式用于匹配字符串模式。如果在验证输入字符串的格式(但实际值)后没有明确说明,您也可以使用
filter_var("1.33", FILTER_VALIDATE_FLOAT);
确保输入可用作浮点值。如果它不是浮点数,则返回FALSE
,否则返回浮点数或整数值。适用任何type juggling规则。
答案 3 :(得分:4)
这个正则表达式:
\d*(?:\.\d+)?
将给出结果:
123 -> true
123.345 -> true
123. -> true
.345 -> true
0.3345 -> true
但是,在使用之前必须检查输入的空白,因为正则表达式还允许零长度输入。
答案 4 :(得分:3)
您可以is_numeric()
使用它会接受多于一个通常需要的警告(例如1e4
)。
答案 5 :(得分:1)
为什么不使用http://php.net/manual/en/function.is-float.php?但无论如何,RegEx会^[\d]+(|\.[\d]+)$
玩得开心!
答案 6 :(得分:0)
如果您对正则表达式没有经验,为什么不使用is_numeric
。
至于你的正则表达式:.
匹配所有字符,\.
匹配一个点。 {1}
没有必要。而且我不知道你要对[^ ... ]
做些什么。如果您真的想在代码中的某处使用正则表达式,请阅读regular expressions tutorial。
答案 7 :(得分:0)
我编写了以下正则表达式,到目前为止,它似乎最适合我的测试输入,
/^-?(\d|[1-9]+\d*|\.\d+|0\.\d+|[1-9]+\d*\.\d+)$/
它使用前两个选项匹配整数
\d|[1-9]+\d*
然后它会查找以 .5、.55、.05 等开头的数字。
\.\d+
然后它会查找与之前相同但在 . 前有 0 的 .
0\.\d+
然后最后查找模式整数和小数部分,例如 5.5、5.05 等。
[1-9]+\d*\.\d+
您可以在此链接中测试正则表达式