Java正则验证特定格式电话号码失效,求解决方案
修复电话号码验证正则表达式问题
你的正则表达式存在两个核心问题:
- 错误要求国家代码后必须有两个空格(
[ ]部分重复定义了空格),不符合"仅允许一个空格"的规则; - 语法冗余,
\\d和[0-9]功能等价,且Pattern.matches默认匹配整个字符串,无需额外的$锚点。
修正后的正则表达式
使用以下正则即可满足需求:
"\\+\\d{1,3} \\d{1,10}"
正则各部分说明:
\\+:匹配电话号码开头的加号\\d{1,3}:匹配1-3位的国家代码数字:匹配国家代码后的一个空格(严格符合要求)\\d{1,10}:匹配1-10位的电话号码主体部分
修正后的完整代码
public class ValidatePhoneNumbers { public static void main(String[] args) { checkNumber("+5555555555");// not a valid checkNumber("+123 1234567890");//should be valid checkNumber("+1 1234567890");//should be valid checkNumber("+1 12345678905555");//should not be valid } protected static void checkNumber(String number) { System.out.println(number + " : " + ( Pattern.matches("\\+\\d{1,3} \\d{1,10}", number) ? "valid" : "invalid" )); } }
测试结果
运行后会输出:
+5555555555 : invalid +123 1234567890 : valid +1 1234567890 : valid +1 12345678905555 : invalid
完全符合你的预期要求。
内容的提问来源于stack exchange,提问作者JAVA_CAT
相关产品推荐
相关产品推荐

