我希望用户只能输入0-9和一个小数点。
patt = /[^0-9(.{1})]/
1.2222 -> true
1.2.2 -> false (only once '.')
帮帮我,谢谢!
/^-?(?:\d+|\d*\.\d+)$/
这个匹配普通的浮点数,例如3.14
,只有小数部分的简写,例如.5
和整数,例如9
,以及负数。
这就是你正在寻找的内容
$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函数。
D (PCRE_DOLLAR_ENDONLY) 如果设置了此修饰符,则模式中的美元元字符仅在主题字符串的末尾匹配。如果没有此修饰符,则美元符号也会在最后一个字符之前立即匹配,如果它是换行符(但不是在任何其他换行符之前)。如果设置了m修饰符,则忽略此修饰符。在Perl中没有相当于此修饰符的内容。
FYI:x用于扩展:用于抑制任何空格字符。 - MediaVincefilter_var("1.33", FILTER_VALIDATE_FLOAT);
FALSE
,否则返回浮点数或整数值。适用任何类型转换规则。123e-4
。 - salathe123e-4
仍然是一个浮点数(0.123
)。 - Gordon\d*(?:\.\d+)?
将会给出结果:
123 -> true
123.345 -> true
123. -> true
.345 -> true
0.3345 -> true
但是,在使用正则表达式之前,您必须检查输入是否为空,因为正则表达式还允许零长度的输入。
/^-?(\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+
您可以在此链接中测试正则表达式:
验证浮点数 - regex101
为什么不使用http://php.net/manual/en/function.is-float.php?但无论如何,正则表达式应该是^[\d]+(|\.[\d]+)$
,玩得开心!
如果你没有正则表达式的经验,为什么不直接使用is_numeric
呢?
关于你的正则表达式:.
匹配所有字符,\.
匹配一个点。 {1}
是不必要的。而且我也不知道你试图用[^ ... ]
做什么。如果你真的想在代码中使用正则表达式,请阅读正则表达式教程。