金额的正则表达式始终返回true

时间:2018-04-02 08:04:29

标签: php regex

我对正则表达不是很熟悉。有人能告诉我为什么我总是得到 true 的结果?在regex101中,这有效..这是我的输入 dd(crb_is_valid_amount(' 1234567。')); 这是我验证金额的函数:

function crb_is_valid_amount( $amount ) {
if ( preg_match( '/([\d]{1,6})(\.[\d]{2})?/', $amount ) )
{
 return true;
}
return false;
}

2 个答案:

答案 0 :(得分:5)

您可以使用^$指定字符串的开头和结尾

function crb_is_valid_amount( $amount ) {
    return preg_match('/^\d{1,6}(\.\d{2})?$/', $amount) ;
}

var_dump(crb_is_valid_amount('112.12')); // 1
var_dump(crb_is_valid_amount('1234567.')); // 0

对于第二种情况,您的原始正则表达式返回true,因为'1234567.' 包含6位,但不会处理6位数后面的内容。使用^$检查给定字符串是否与表达式完全匹配,从开始到结束。

意思是:

^\d{1,6}     # Begins with 1 to 6 digits,
(\.\d{2})?   # Optionally with a dot and 2 digits,
$            # End of given string (nothing after accepted).

答案 1 :(得分:3)

您应该使用字符串锚点的开头和结尾以及raw_query

\d{1,6}

Live demo