Java 电话号码正则表达式
在Java中使用正则表达式验证电话号码时,需要考虑不同国家和地区的电话号码格式,以下是一些常用的正则表达式示例,适用于常见的电话号码格式。
简单的中国手机号码验证
public static boolean isValidChinesePhoneNumber(String phoneNumber) {
String regex = "^1[3-9]\\d{9}$";
return phoneNumber != null && phoneNumber.matches(regex);
}
这个正则表达式验证以1开头,第二位是3-9,后面跟着9位数字的手机号码。
包含国际区号的中国电话号码
public static boolean isValidInternationalPhoneNumber(String phoneNumber) {
String regex = "^(\\+\\d{1,3}[- ]?)?1[3-9]\\d{9}$";
return phoneNumber != null && phoneNumber.matches(regex);
}
这个版本允许添加国际区号(如+86),区号后可以跟空格或短横线。
美国电话号码验证
public static boolean isValidUSPhoneNumber(String phoneNumber) {
String regex = "^\\+1?\\d{10}$";
return phoneNumber != null && phoneNumber.matches(regex);
}
验证美国电话号码,格式如+14155552671或4155552671。
带分隔符的通用电话号码
public static boolean isValidPhoneNumberWithSeparators(String phoneNumber) {
String regex = "^(\\+\\d{1,3}[- ]?)?\\(?\\d{3}\\)?[- ]?\\d{3}[- ]?\\d{4}$";
return phoneNumber != null && phoneNumber.matches(regex);
}
这个正则表达式允许使用括号、空格或短横线作为分隔符,如(123) 456-7890或+1 (123) 456-7890。
国际电话号码通用验证
public static boolean isValidInternationalPhoneNumber(String phoneNumber) {
String regex = "^(\\+\\d{1,3}[- ]?)?(\\(\\d{1,3}\\)|\\d{1,3})[- ]?\\d{1,4}[- ]?\\d{1,4}[- ]?\\d{1,9}$";
return phoneNumber != null && phoneNumber.matches(regex);
}
这个正则表达式更通用,可以验证大多数国际电话号码格式。
使用示例
public static void main(String[] args) {
String[] testNumbers = {
"13812345678", // 有效中国手机号
"8613812345678", // 有效带国际区号
"+86 138 1234 5678", // 有效带分隔符
"1234567890", // 无效
"12345", // 无效
"+1 (415) 555-2671" // 有效美国号码
};
for (String number : testNumbers) {
System.out.println(number + ": " + isValidChinesePhoneNumber(number));
}
}
注意事项
- 电话号码格式因国家和地区而异,应根据实际需求选择合适的正则表达式
- 对于生产环境,建议考虑使用专门的电话号码验证库,如Google的libphonenumber
- 正则表达式可能无法覆盖所有边缘情况,可能需要根据实际需求进行调整
- 考虑添加空值检查和其他输入验证
如果需要更精确的电话号码验证,建议使用专门的库如libphonenumber,它提供了更全面和准确的国际电话号码验证功能。
