我是PHP新手。我试图检查其中一个表单输入(包含在此示例的$price
中)是否为小数,如下所示:
if(!preg_match("\\d+(.\\d{1,2})?", $price))
//do something
在Java中,它本来是
price.matches("\\d+(.\\d{1,2})?")
但同样的正则表达式在PHP中不起作用。 preg_match
也匹配子字符串吗?
我希望以下输入为真:
300
300.5
300.56
所有其他格式都应该是假的。我无法弄清楚如何在PHP中这样做。
答案 0 :(得分:5)
我不明白这可能如何在Java中发挥作用。第一个数字只匹配一个数字。您的示例匹配几位数。
请尝试使用此正则表达式:
/\d+(?:\.\d{1,2})?/
请注意我是如何将正则表达式放在"包装器中的?#34; (/
)并注意我在数字匹配前删除了\
的转义。此外,我使用非捕获组替换了小数点周围的捕获组,因为在您的上下文中它看起来不像您需要它。
PHP代码:
if (!preg_match("/\d+(?:\.\d{1,2})?/",$price)) {
// do something
}
答案 1 :(得分:2)
我会说
\d(\.\d{1,2})?
据我记得,一个点也需要转义
答案 2 :(得分:1)
(!preg_match("/\d(\.\d{1,2})?/",$price))
记住开始和结束/'s
答案 3 :(得分:1)
我们这样做:
is_string($price) and trim($price); // Might be worth doing first
if(preg_match('~^\\d+(?:\\.\\d{1,2})?$~', $price)) {
$price = floatval($price); // Kewl, keep going
}else{
// Unkewl, fail
}
:)完成了Rant!