【后端】手机号码校验(正则表达式)

一直都是用这个大佬的代码先码上链接 , 我要写带分析的所以要代码的直接点链接跳过去

Java手机号码正则表达式验证_mokeng_zx的博客-CSDN博客_java手机号码正则表达式

文尾附上敷衍式前端代码

【代码】

/**
     * 手机号码正则 验证手机号码格式
     * @param mobile
     * @return true 说明格式匹配上了 (具体分析见下文)
     */
    public static Boolean isMobile(String mobile) {
        String regex = "^((13[0-9])|(14[579])|(15([0-3]|[5-9]))|(16[56])|(17[0-8])|(18[0-9])|(19[1589]))\\d{8}$";
        Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(mobile);
        return m.matches();
    }

【分析】

不是最全的用法就写当下用到的

▲正则表达式什么意思

①  ^ 以什么开头。 ^1 就是以1开头的意思

     $ 以什么结尾。 123$ 就是以123结尾的意思

②  | 或 。a|b 意思就是只要是a或者b就会满足要求了

比如 'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。

③ \d 数字 0到9都可以。如果是\D那就是除了数字0-9以外的

④ ( ) 就是一部分整体。比如^(123)意思就是必须是123开头

⑤ { }就是几位的意思。

比如\d{8}就是你写8位而且必须是数字

比如[a-z]{3,6}就是你最少写3位最多写6位且必须都是小写字母

⑥ [ ] 字符集合。匹配所包含的任意一个字符。注意只能是一个!

比如, '[abc]' 可以匹配 "plain" 中的 'a'。

比如, 热心市民 : HotShimin[ACG] , 那这个市民就可以是HotShiminA或者HotShiminC或者HotShiminG

注意 , 只能指定一位,不能在一个中括号里指定两位,看下面的电话号码正则解析就懂了↓

【正则解析】

^( (13[0-9]) | (14[579]) | (15([0-3] | [5-9])) | (16[56]) | (17[0-8]) | (18[0-9]) | (19[1589]) ) \\d{8} $

①^() 意思就是必须以这个括号里边的东西开头,至于括号里的是什么

②这里只举例子,后面同理推就懂了

(13[0-9]) 表示一共以这三位开头 : 1 , 3 , 0~9随便挑一个

(14[579]) 同理,表示145,147,149

(15([0-3] | [5-9]))同理,表示1,5,第三位是0-9内除了4以外都可以

所以可以开头的很多情况↑↑不再一一说明

③ \\d{8} 表示要写8位数字

④ $ 表示结尾了

所以一共是 : 前三位指定格式 + 后面8位数字 , 手机号码一共是11位

【代码解析】

①为啥String取名叫regex : 因为regex就是正则表达式的意思

②Pattern类和Matcher类没见过 : 首先中文意思分别是样式(模板) 和 匹配 的意思

如果你要在写Java代码的时候嵌入正则的话就用Pattern和Matcher这两个类

在JDK 1.4中,Java增加了对正则表达式的支持。

java与正则相关的工具主要在java.util.regex包中;此包中主要有两个类:Pattern、Matcher。

下面阐述简单用法三步

①String regex =  "把正则表达式写这里面";

Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

②Pattern类

的构造器私有且自身被final修饰所以是不能new的 , 要通过compile方法来实例化

这一步可以理解为确认好用正则匹配的模板长什么样 + 有什么要求没有(第二个参数)

→当前第二个参数的意思是"启用不区分大小写的匹配" , 还有很多点进去源码看去(文末指路)

→模板长什么样看第一个参数,用String regex = "把正则表达式写这里面";

③Matcher类

就是现在你把你要匹配的东西塞进去看下格式符合不,返回的是boolean,行就true

Matcher m = p.matcher(mobile);
return m.matches(); // 返回boolean值true代表匹配成功

用户不是填了个电话吗,注意要用String mobile不要用数字类型因为万一是固话带杠或者括号

这里还有个例子巩固一下

        Pattern p = Pattern.compile("a*b");
        Matcher m = p.matcher("aaaaab");
        boolean b = m.matches();
        System.out.println(b);// true

---------------------

还没用上的,  用上了我来这里补

① \n  换行符

② \   单独一个斜杠 : 他本身不能作为一个斜杠, 有意义的,表示将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。

(很复杂的表达总之就是如果你要用反斜杠作为一个字符的话

不能直接写一个反斜杠就算了具体怎么搞看下面)

比如,

① 'n' 匹配字符 "n"。

② '\n' 匹配一个换行符。

③序列 '\\' 就是一个反斜杠

④ "\("  就是左括号的意思

【拓展】

我们在写用户注册表单的时候,只允许用户名包含字符、数字、下划线和连接字符 -,并设置用户名的长度,我们就可以使用以下正则表达式来设定。

 所以上面这图啥意思 : 你可以以字母a到z或者数字0到9还有下划线和横杠开头,然后你这个用户名最短要仨字最长只能15位

前端简易代码参考

如果有优化或者更新我会来这里补并标注更新日期

$(function () {
    $('#_js_loginBtn').click(function () {
        var val = $('#inputPassword').val();

        if (/^1\d{10}$/g.test(val)) {

            $.get(domainUrl + "/users/checkPhone", {phone:val}, function (data) {
                /*data : 已注册 , 那么 !data : 没有注册*/
                if(!data){
                    $('#inputPassword').next().text('').hide();
                    $('.login-box').hide();
                    $('.signup-box').show();
                    $("#phone").val(val);
                }else{
                    $('#inputPassword').next().text('手机号码已注册.').show()
                }
            })
        } else {
            $('#inputPassword').next().text('手机号码格式不正确').show()
        }
    });

【Pattern和Matcher】

java之Pattern类详解_thlzjfefe的博客-CSDN博客_pattern类

【 \\d 的拓展】

正则表达式“\\d+||(\\d+\\.\\d+”是什么意思_百度知道

【正则表达式字符都是什么意思我忘了】

正则表达式 – 元字符 | 菜鸟教程

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值