不败君

前端萌新&初级后端攻城狮

PHP正则验证手机号是否正确

PHP正则验证手机号是否正确

2019-12-25 18:06:35

围观(2860)

在一个项目中,判断手机号正确错误是很普遍使用的。本文将使用正则表达式验证手机号是否正确。


验证手机号的正则表达式:https://github.com/VincentSit/ChinaMobilePhoneNumberRegex


进去上面这个开源地址,就能看到多种最新可用匹配手机号的正则表达式,其中还能匹配手机号是什么运营商及卡类型。


本文就拿“匹配所有号码”作为演示。

^(?:+?86)?1(?:3d{3}|5[^4D]d{2}|8d{3}|7(?:[01356789]d{2}|4(?:0d|1[0-2]|9d))|9[13589]d{2}|6[2567]d{2}|4(?:[14]0d{3}|[68]d{4}|[579]d{2}))d{6}$

复制下来后一顿操作,写这样一段代码:

<?php
$phone = 19999999999;

if (isMobile($phone)) {
    echo '手机号正确';
} else {
    echo '手机号错误';
}

function isMobile($phone)
{
    if (!is_numeric($phone) || mb_strlen($phone) !== 11) {
        return false;
    }

    $regex = '#^(?:+?86)?1(?:3d{3}|5[^4D]d{2}|8d{3}|7(?:[01356789]d{2}|4(?:0d|1[0-2]|9d))|9[13589]d{2}|6[2567]d{2}|4(?:[14]0d{3}|[68]d{4}|[579]d{2}))d{6}$#';

    return preg_match($regex, $phone);
}


就完成验证手机号是否正确了。写代码时,会发现上面从 Github 复制的正则表达式并不能正确匹配,是因为需要把 Github 上复制的表达式首尾加上"#":

#^(?:+?86)?1(?:3d{3}|5[^4D]d{2}|8d{3}|7(?:[01356789]d{2}|4(?:0d|1[0-2]|9d))|9[13589]d{2}|6[2567]d{2}|4(?:[14]0d{3}|[68]d{4}|[579]d{2}))d{6}$#

上面这段代码是匹配所有正确的手机号,如果有其他需求,比如匹配某个运营商的,可以去上面的开源项目看看。

本文地址 : bubaijun.com/page.php?id=157

版权声明 : 未经允许禁止转载!

评论:我要评论
发布评论:
Copyright © 不败君 粤ICP备18102917号-1

不败君

首 页 作 品 微 语