$mobile= I(‘post.mobile’);
if (strlen($mobile) != 11 || !is_numeric($mobile)) {
var_dump($mobile);
var_dump(is_numeric($mobile));
var_dump(ctype_digit($mobile));
die(‘请输入正确的手机号码’);
}
打印:
string(14)”18765901234″
false
false
原因:
手机号上拼接了ASCII码,导致使用strlen()
函数得到的长度比实际长度多了2位 。
当进行打印是看不出来的,strlen()发现了长度并不是11位,是14位。
解决:
$mobile= I(‘post.mobile’);
//过滤掉多余的ASCII码
$mobile = iconv(“UTF-8”, “GB2312//Ignore”, $mobile);
$mobile = iconv(“GB2312”, “UTF-8//Ignore”, $mobile);
if (mb_strlen($mobile, “UTF-8”) != 11 || !is_numeric($mobile)) {
die(‘请输入正确的手机号码’);
}