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

Sve*_*zar 0 php regex

我对正则表达式不太熟悉.谁能告诉我,为什么我总是得到正确的结果呢?在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;
}
Run Code Online (Sandbox Code Playgroud)

Sys*_*all 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
Run Code Online (Sandbox Code Playgroud)

对于第二种情况,您的原始正则表达式返回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).
Run Code Online (Sandbox Code Playgroud)