杰瑞科技汇

Java手机号正则表达式怎么写?

Java 手机号码正则表达式

在 Java 中,可以使用正则表达式来验证手机号码的格式,以下是几种常见的手机号码正则表达式及其使用方法:

Java手机号正则表达式怎么写?-图1
(图片来源网络,侵删)

中国大陆手机号码正则表达式

中国大陆手机号码通常为11位数字,以1开头,第二位为3-9:

String regex = "^1[3-9]\\d{9}$";

完整示例代码

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class PhoneNumberValidator {
    public static boolean isValidChinesePhoneNumber(String phoneNumber) {
        String regex = "^1[3-9]\\d{9}$";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(phoneNumber);
        return matcher.matches();
    }
    public static void main(String[] args) {
        String[] testNumbers = {
            "13812345678",  // 有效
            "15987654321",  // 有效
            "12345678901",  // 无效(第二位不是3-9)
            "1381234567",   // 无效(不足11位)
            "138123456789", // 无效(超过11位)
            "abc12345678"   // 无效(包含字母)
        };
        for (String number : testNumbers) {
            System.out.println(number + ": " + isValidChinesePhoneNumber(number));
        }
    }
}

其他常见手机号码正则表达式

香港手机号码

String regex = "^[569]\\d{7}$";

台湾手机号码

String regex = "^[09]\\d{8}$";

美国手机号码

String regex = "^\\+1[2-9]\\d{9}$";

更严格的手机号码验证(考虑运营商号段)

如果需要更精确地验证中国大陆手机号码的运营商号段:

String regex = "^1(3[0-9]|4[579]|5[0-3,5-9]|6[6-9]|7[0135678]|8[0-9]|9[0-9])\\d{8}$";

这个正则表达式覆盖了以下运营商号段:

  • 13x: 中国移动
  • 14x: 中国联通/电信
  • 15x: 中国移动/联通/电信
  • 16x: 中国联通/电信
  • 17x: 中国电信/移动/联通
  • 18x: 中国移动/联通/电信
  • 19x: 中国电信/移动/联通/广电

使用第三方库

如果需要更复杂的手机号码验证,可以考虑使用第三方库如 Apache Commons Validator:

Java手机号正则表达式怎么写?-图2
(图片来源网络,侵删)
import org.apache.commons.validator.routines.PhoneNumberValidator;
public class PhoneNumberValidator {
    public static boolean isValidPhoneNumber(String phoneNumber) {
        return PhoneNumberValidator.getInstance().isValid(phoneNumber, "CN");
    }
}

注意事项

  1. 手机号码正则表达式会随着运营商号段的更新而变化
  2. 正则表达式只能验证格式,不能验证号码的真实存在性
  3. 对于国际号码,建议使用 E.164 格式(如 +8613812345678)
  4. 在实际应用中,建议结合业务需求选择合适的验证规则

希望这些信息对您有所帮助!

分享:
扫描分享到社交APP
上一篇
下一篇