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)
相关推荐
凤山老林1 小时前
26-Java this 关键字
java·开发语言
焦糖玛奇朵婷2 小时前
解锁扭蛋机小程序的五大优势
java·大数据·服务器·前端·小程序
SamDeepThinking2 小时前
别让一个超时的第三方http接口拖垮所有接口
java·后端·架构
YaBingSec2 小时前
玄机靶场:供应链安全-供应链应急-Part2 通关笔记
java·笔记·安全
Gerardisite2 小时前
企微机器人开发指南
java·python·机器人·自动化·企业微信
OtIo TALL2 小时前
Java进阶(ElasticSearch的安装与使用)
java·elasticsearch·jenkins
一 乐3 小时前
交通感知与车路协同系统|基于springboot + vue交通感知与车路协同系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·交通感知与车路协同系统
Java面试题总结3 小时前
FVG3 构建系统 MinGW 配置问题排查文档
java
乐之者v3 小时前
游标分批查询,提高查询性能
java