PHP正则表达式 - 有效的浮点数

时间:2010-10-15 09:38:38

标签: php regex

我希望用户只输入0-9而且只能输入一次“。”

 patt = /[^0-9(.{1})]/

 1.2222 -> true
 1.2.2  -> false (only once '.')

帮助我,谢谢!

8 个答案:

答案 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+

您可以在此链接中测试正则表达式

Validate float - regex101