我对正则表达不是很熟悉。有人能告诉我为什么我总是得到 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;
}
答案 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)