我需要一个正则表达式的价格必须有一个正数,然后两位小数。但是,它不能是零美元

时间:2015-04-05 01:34:38

标签: regex

我需要一个正则表达式,用于必须具有正数然后两位小数的价格。但是,它不能为零美元。例0.00是错误的。

 if(preg_match("~^[0-9]+\.[0-9]{2}$~",$userPrice))

5 个答案:

答案 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";
}

DEMO

答案 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}$