Java 手机号校验工具类

需求分析

一个合法的中国大陆手机号通常满足以下规则:

  • 长度为 11 位

  • 全部由数字组成

  • 以 1 开头,第二位为 3-9(涵盖现有运营商号段)

  • 后续 9 位为任意数字

工具类实现

java 复制代码
import java.util.regex.Pattern;

public class MobileValidator {

    // 手机号正则:1开头,第二位3-9,后面9位数字,总共11位
    private static final Pattern MOBILE_PATTERN = Pattern.compile("^1[3-9]\\d{9}$");

    /**
     * 手机号校验逻辑
     * @param mobile 待校验的手机号字符串
     * @return 是否合法
     */
    public static boolean validateMobileNumber(String mobile) {
        // 防空及长度校验
        if (mobile == null || mobile.length() != 11) {
            return false;
        }
        // 纯数字校验
        if (!mobile.matches("\\d+")) {
            return false;
        }
        // 正则格式匹配
        return MOBILE_PATTERN.matcher(mobile).matches();
    }
}

校验设计思路

  1. 长度校验

    提前过滤掉长度不为 11 的输入,避免无意义的后续判断。同时增加了 null 判断,防止空指针异常。

  2. 全数字校验

    使用 \\d+ 确保字符串中每一个字符都是数字。该正则等价于 ^[0-9]+$,能有效拦截包含字母、空格或特殊符号的字符串。

  3. 正则匹配
    ^1[3-9]\\d{9}$ 精确描述了 11 位手机号的组成规则:

    • ^1:以数字 1 开头

    • [3-9]:第二位为 3、4、5、6、7、8、9 中的一个

    • \\d{9}:后续 9 位均为数字

    • $:字符串结尾

    只有当长度、纯数字、号段规则全部满足时,才返回 true

main 方法调用演示

java 复制代码
public class MobileValidatorDemo {
    public static void main(String[] args) {
        // 测试用例
        String[] testMobiles = {
                "13812345678",   // 合法
                "15000000000",   // 合法
                "12012345678",   // 第二位为2,不合法
                "12345678901",   // 第二位为2,不合法
                "1381234567",    // 长度不足
                "138123456789",  // 长度超长
                "138abcdefgh",   // 包含字母
                null,            // null
                ""               // 空字符串
        };

        for (String mobile : testMobiles) {
            boolean isValid = MobileValidator.validateMobileNumber(mobile);
            if (isValid) {
                System.out.println("[合法] 手机号: " + mobile);
            } else {
                System.out.println("[不合法] 手机号: " + mobile +
                        " (必须为11位数字且符合中国手机号规则:1开头,第二位3-9)");
            }
        }
    }
}

运行结果:

java 复制代码
[合法] 手机号: 13812345678
[合法] 手机号: 15000000000
[不合法] 手机号: 12012345678 (必须为11位数字且符合中国手机号规则:1开头,第二位3-9)
[不合法] 手机号: 12345678901 (必须为11位数字且符合中国手机号规则:1开头,第二位3-9)
[不合法] 手机号: 1381234567 (必须为11位数字且符合中国手机号规则:1开头,第二位3-9)
[不合法] 手机号: 138123456789 (必须为11位数字且符合中国手机号规则:1开头,第二位3-9)
[不合法] 手机号: 138abcdefgh (必须为11位数字且符合中国手机号规则:1开头,第二位3-9)
[不合法] 手机号: null (必须为11位数字且符合中国手机号规则:1开头,第二位3-9)
[不合法] 手机号:  (必须为11位数字且符合中国手机号规则:1开头,第二位3-9)
相关推荐
mldong3 小时前
引擎从不发一条消息:jeeflow 的两类扩展点与消息模块的分工
java·架构
君顾14 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
zhanghe6874 小时前
es的密码带有特殊字符,导出
java
pnoker4 小时前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
my_realmy4 小时前
Java SE 基础学习笔记(一):面向对象、继承多态、抽象接口与异常(JDK 8)
java·多线程·并发··生产者消费者模式
天远数科5 小时前
风险治理实战:基于天远车信盟出险构建自动化理赔核保流水线
java·网络·人工智能·自动化
骇客野人5 小时前
SpringBoot电商系统用户注册、登录、留存及数据埋点设计与落地实施方案
java·spring boot·后端
qiuhaipeng16 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
wxwx_bscxy3226 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
evans在进步7 小时前
Tomcat NIO 工作原理详解:从 Acceptor、Poller 到容器处理链
java·tomcat·nio