2017-02-22 54 views
-1

我的程序目前僅在連續十個數字和字符時驗證電話號碼,並且當輸入單詞「exit」時關閉。不過,我想知道我怎麼能驗證號碼,如果他們還寫成兩個,例如,(123)456-7890和123-456-7890如何驗證多個變體的電話號碼輸入?

import java.util.Scanner; 
public class Q2 
{ 
    public static void main(String[] args){ 
    Scanner kb=new Scanner(System.in); 
    while (true){ 
     System.out.print("Enter your phone number: "); 
     String number=kb.next(); 
     if(number.equals("exit")){ 
      System.exit(0); 
     } 
    boolean valid=true; 
    for(int i=0;i<number.length();i++){ 
     if(number.length()!=10) valid=false; 
    } 
    if (valid) System.out.println("It is valid"); 
    else System.out.println("It is invalid"); 
    } 
    } 
} 
+0

剛剛[正則表達式(http://www.vogella.com/tutorials/JavaRegularExpressions/article.html ) –

回答

0

你做的做真正驗證。

含義:「驗證」描述了根據規則集檢查輸入的過程。如果輸入符合全部這些規則,則是有效的;否則它不是。

所以,是的,檢查長度是第一個簡單的規則;但「長度是10」......結果不是一個好規則。例如,「123456A90」的長度爲10;但無效。

你可以做什麼,而不是(只是給你一些想法):

  • 使用正則表達式(或純字符串解析),以確定您的輸入字符串比賽一定的模式,像(NNN -nnnn -nnnn)
  • 簡單替換所有「不需要」的字符,例如() - 帶「」;然後你檢查結果的字符串長度爲10

    因此,答案是:必須在你輸入的密切關注,並確定有效電話號碼有共同的屬性。然後你開始編寫代碼來檢查它們。

+0

我認爲唯一有效的解決方案就是你的第一個項目符號:正則表達式。第二個會接受一個電話號碼,如0(-1 --- 2(3456789 –

+0

@bra_racing)總是有不止一種方式來做事情,當你用一個好的模式做一個replaceAll()關鍵是:他是一個新手,因此專注於「這裏使用正則表達式」就會帶出很多這樣的問題提供的「多樣性」。學習編程就是學習理解和探索選項空間;-) – GhostCat

+0

完全正確,我剛剛指出,一個簡單的替換而不控制一個好的模式並不是一個有效的解決方案,但當然,我非常同意你在這裏的關鍵是處理這個問題只是調查和編程 –

0

爲什麼你根本就沒有使用正則表達式這樣的功能更強大:

public static void main(String[] args) { 
    System.out.println("123-456-7890 is valid? " + valider("123-456-7890")); 
    System.out.println("(123)456-7890 is valid? " + valider("(123)456-7890")); 
} 

private static boolean valider(String phoneNumber) { 
    if (phoneNumber.matches("\\d{3}[-\\.\\s]\\d{3}[-\\.\\s]\\d{4}")) { 
     return true; 
    } else return phoneNumber.matches("\\(\\d{3}\\)\\d{3}-\\d{4}"); 
}