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)
相关推荐
sunshine22 girl13 分钟前
Java学习七 Java 项目实战2-注册业务
java·学习
省钱兄--zs36 分钟前
北京24小时自助健身房系统软件开发实战:从架构设计到部署指南
java·数据仓库·spring boot·小程序·需求分析
youdexiang1 小时前
Android录音软件时间关键词检索功能分析
java·人工智能
sunshine22 girl2 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
code2cat2 小时前
Java进阶篇之AtomicStampedReference:引用回到原值,版本戳仍能记住变化
java·cas·并发编程·aba
泡茶喝茶写代码3 小时前
A股量化数据工程:从 REST 接口到策略信号(第 8 篇):成长能力因子:营收与利润增速
java·python·股票数据api·股票数据api接口·股票量化数据api·股票量化数据接口·股票数据api数据
\光辉岁月/4 小时前
7.javase-面向对象
java·开发语言
weixin_531094694 小时前
heap_4内存管理
java·开发语言·算法
程序员南飞4 小时前
win系统安装minio
java·数据结构·算法
Escalating_xu5 小时前
【Python】使用库:标准库、第三方库、pip、项目实战与程序打包
java·python·pip