Java中的RegEx电话号码

Java中的RegEx电话号码,java,regex,pattern-matching,Java,Regex,Pattern Matching,我有一些类型的电话号码是123-1234567和(321)1234567,然后我将电话号码设置为: 123-1234567, Area Code = 123, Number = 1234567 (321) 1234567, Area Code = 321, Number = 1234567 我使用模式()(\\d+)(\\d+),但结果与123-1234567的预期不符 我使用的程序代码 import java.util.regex.Matcher; import java.util

我有一些类型的电话号码是123-1234567和(321)1234567,然后我将电话号码设置为:

123-1234567, 
Area Code = 123, 
Number = 1234567

(321) 1234567, 
Area Code = 321, 
Number = 1234567
我使用模式
()(\\d+)(\\d+)
,但结果与
123-1234567的预期不符

我使用的程序代码

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
private static Pattern telp = Pattern.compile("(.)(\\d+)(.)(\\d+)");

   public static void testNomor(String s){

       Matcher m = telp.matcher(s);

       if (m.matches()) {
           System.out.println(s + "\nArea Code = " +m.group(2)+"\nPhone Number = " + m.group(4) + "\n");
       }  else {
           System.out.println(s+" phone number is invalid");
       }
   }

   public static void main(String[] args) {
       testNomor("(321)1234567");
       testNomor("123-1234567");
       testNomor("(1433)-123 456");
   }
}

对我来说,在你的例子中,你想要匹配什么并不100%清楚, 我对美国的电话号码不太熟悉, 但你可以给出模式

\\((\\d+)\\)-?(\\d+)\\D*?(\\d*)

一枪, i、 e:

这给了我:

(321)1234567
Area Code = 321
Phone Number = 1234567

123-1234567
Area Code = 123
Phone Number = 1234567

(1433)-123 456
Area Code = 1433
Phone Number = 123456
www上可能有更复杂的regex, 这比我在这里更能验证电话号码。注意,我更新了 我的帖子的原因在下面的评论中提到


当然,您可以将这两种模式与or运算符
|
组合,并使用正向向前/向后查找,然后将
if
else if
组合到一个表达式中。第二,删除为说明目的而引入的代码重复

哇。你完全没有做任何研究,是吗?我花了15秒的时间向谷歌索要电话号码正则表达式,并取得了好几次成功。谢谢你。你必须小心我给你的模式,这并不能确保你在所有情况下都有匹配的括号。不过,您必须稍微修改一下模式。使用两种不同的模式并尝试分别匹配它们也没有错。
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
private static Pattern telp1 = Pattern.compile("\\((\\d+)\\)-?(\\d+)\\D*?(\\d*)");
private static Pattern telp2 = Pattern.compile("(\\d+)-?(\\d+)\\D*?(\\d*)");

   public static void testNomor(String s){

       Matcher m = telp1.matcher(s);
       Matcher m2 = telp2.matcher(s);

             if (m.matches()) {
       System.out.println(s + "\nArea Code = " +m.group(1)+"\nPhone Number = " + m.group(2) + m.group(3) + "\n");
   } else if (m2.matches()) {
       System.out.println(s + "\nArea Code = " +m2.group(1)+"\nPhone Number = " + m2.group(2) + m2.group(3) + "\n");

   }  else {
       System.out.println(s+" phone number is invalid");
   }
}
(321)1234567
Area Code = 321
Phone Number = 1234567

123-1234567
Area Code = 123
Phone Number = 1234567

(1433)-123 456
Area Code = 1433
Phone Number = 123456