2017-03-28 166 views
0

我有一些类型的电话号码是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"); 
    } 
} 
+1

哇。你完全没有做过研究,是吗?我花了15秒时间向Google询问电话号码的正则表达式并获得了几次匹配 –

回答

0

对我来说,程序代码期望它不是100%清楚你想要在你的例子匹配的内容, 和我不熟悉太与美国的电话号码, 但你可以给模式

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

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

了一枪, 即:

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 

在www, 中可能有更复杂的正则表达式,它比我在这里验证电话号码更好。请注意,我更新了 我的帖子,原因如下所述。

当然可以组合这两个图案与或操作员|并使用正超前/回顾后,然后合并ifelse if成一个表达的两种取出代码重复我用于说明目的引入。

+0

非常感谢 –

+0

您必须小心我给您的模式,但并不确保 您在所有情况下都有匹配的括号。尽管如此,你将不得不修改 这个模式。使用两种不同的模式并尝试将它们分开匹配也没有任何问题。 –