我对正则表达式不太熟悉.谁能告诉我,为什么我总是得到正确的结果呢?在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)
您可以使用^并$指定字符串的开头和结尾
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)