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)
相关推荐
M-Robots echo1 小时前
轻量化裁剪方案解析:M-Robots 模块化构建,适配高低端各类机器人硬件平台
java·机器人·ros·开源社区·atomgit·m-robots
不可求~2 小时前
多模型路由怎么落地:把任务分流写进项目的最小实现
java·前端·数据库
mldong3 小时前
用 DDD 设计工作流引擎:聚合根与充血模型
java·架构
mqiqe4 小时前
AgentScope Java Harness:4. 双层记忆系统 让 Agent 拥有真正的“长期大脑“
java·开发语言
伍一514 小时前
03-文件管理模块-一个看似简单的模块藏着多少细节
java·ruoyi·若依
gugucoding4 小时前
46. 【Java】JUC并发工具:让并发更简单
java·开发语言
Nebula_g5 小时前
JavaSE基础语法:面向对象高级(代码中的成分)
java·开发语言·编程·javase·技术栈·高级语法
AC赳赳老秦5 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw
小强库计算机毕业设计7 小时前
SpringBoot+Vue3 学生宿舍管理系统实战
java·spring boot·后端·vue·学生宿舍管理系统
李冰然7 小时前
深入Java集合框架:HashMap源码解析(JDK 8)
java