2017-03-28 102 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

您必須小心我給您的模式,但並不確保 您在所有情況下都有匹配的括號。儘管如此,你將不得不修改 這個模式。使用兩種不同的模式並嘗試將它們分開匹配也沒有任何問題。 –