我有这个字符串:
+1(333) 456-7890
我想用正则表达式匹配它。这就是我现在的正则表达式模式:
Pattern p1 = Pattern.compile("((\\+{0,}[0-9]{0,3}( |-)?)?)(\\(?[0-9]
{3}\\)?|[0-9]{3}( |-)?)([0-9]{3}( |-)?)([0-9]{4}|[a-zA-Z0-9]{7})");
它应该可以识别任何中间带有短划线或空格的电话号码模式,这些模式至少有 10 位数字(或字母),没有国家代码,最多有 13 位数字有国家代码。
我的模式似乎符合某些情况,而不符合其他情况,例如前面所述的情况。我真的很困惑,我们将不胜感激。
您的正则表达式似乎过于复杂,这就是它可能在某处中断的原因。我尝试遵循它,但最终更容易阅读您的定义并从头开始构建一个新定义:
(\+\d{1,3}[- ]*)?(\(?\d\d\d\)?)[- ]*(\d\d\d[- ]?\d\d\d\d|[a-zA-Z0-9]{7})
这匹配以下测试用例:
+1(333) 456-7890
+1-(212) 555-0198
+1 212 555-0198
+1 212-ILOVEUU
根据您自己的测试用例,这可能就足够了。或者不是。
(\+\d{1,3}[- ]*)? // Optional +xxx international prefix plus dash/space
(\(?\d\d\d\)?)[- ]* // three-digit area code with optional parens
(\d\d\d[- ]?\d\d\d\d| // Either 7 digits, with optional dash
[a-zA-Z0-9]{7}) // or 7 letters/digits