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

中国大陆手机号码正则表达式
中国大陆手机号码通常为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:

import org.apache.commons.validator.routines.PhoneNumberValidator;
public class PhoneNumberValidator {
public static boolean isValidPhoneNumber(String phoneNumber) {
return PhoneNumberValidator.getInstance().isValid(phoneNumber, "CN");
}
}
注意事项
- 手机号码正则表达式会随着运营商号段的更新而变化
- 正则表达式只能验证格式,不能验证号码的真实存在性
- 对于国际号码,建议使用 E.164 格式(如 +8613812345678)
- 在实际应用中,建议结合业务需求选择合适的验证规则
希望这些信息对您有所帮助!
