我需要一个正则表达式,用于必须具有正数然后两位小数的价格。但是,它不能为零美元。例0.00是错误的。
if(preg_match("~^[0-9]+\.[0-9]{2}$~",$userPrice))
答案 0 :(得分:1)
这应该适合你:
^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$
答案 1 :(得分:1)
您可以使用这种完整的正则表达方式对其进行验证:
\A(?:[1-9][0-9]*(?:\.[0-9]{2})?|0\.(?:[1-9][0-9]|0[1-9]))\z
如果十进制数字不是可选的:
\A(?:[1-9][0-9]*\.[0-9]{2}|0\.(?:[1-9][0-9]|0[1-9]))\z
另一种可能的方法是使用is_float
并测试变量是否不等于零。但是这种方式不会检查格式。
答案 2 :(得分:0)
这应该这样做:
$userPrice = "0.00";
if (!preg_match('/0\.00/im', $userPrice)) {
if (preg_match('/^[0-9]+\.[0-9]{2}$/i', $userPrice)){
echo "valid price";
}
}else{
echo "Invalid Price";
}
答案 3 :(得分:0)
这应该有效:
^[1-9][0-9]*\.[0-9]{2}$|^0\.(?:[0-9][1-9]|[1-9][0-9])$
if (preg_match('/^[1-9][0-9]*\.[0-9]{2}$|^0\.(?:[0-9][1-9]|[1-9][0-9])$/', $userPrice))
答案 4 :(得分:-2)
试试这个^ [0-9]*[1-9]+\.[0-9]{2}$