2012-02-23 18 views
2

次のコードを使用して電話番号を検証しています。要件は、電話番号が10-25文字の長さである必要があり、ハイフン( - )、ピリオド(。)、カッコ()を含める必要があります。Javaでの電話番号の検証

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


public class ValidatePhoneNumber { 

public static void main(String[] argv) { 

    String phoneNumber = "6058.8()6-05888,9994567"; 
    System.out.println(phoneNumber.length()); 
    //String sPhoneNumber = "605-88899991"; 
    //String sPhoneNumber = "605-888999A"; 
    String regex = "^[0-9.()-]{10,25}$"; 
    Pattern pattern = Pattern.compile(regex); 
    Matcher matcher = pattern.matcher(phoneNumber); 

    if (matcher.matches()) { 
     System.out.println("Phone Number Valid"); 
    } else { 
     System.out.println("Phone Number must be in the form XXX-XXXXXXX"); 
    } 
    } 
} 

私は検証をチェックし、そのは正常に動作し、私は電話番号との間にも同様に空白ができるように空白文字「\ S」にもを追加します。しかし、正規表現で "\ s"を追加する間にエラーが発生しました。

+1

"-----------)))))")有効な電話番号ですか?あなたの正規表現はそれを言うだろう;)私はより完全なアプローチで答えを追加しようとします。また、あなたはそれらの括弧をエスケープする必要があると思うし、あなたのキャラクタークラスの中に点があると思います。 – pcalcao

+0

http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation – John

+1

http://blog.stevenlevithan.com/archives/validate-phone-number – John

答えて

7

、ITU E.のような標準をご覧ください164またはIETF RfC 3966。すべての国が同じ規則と番号の長さを持つと仮定しないでください。ここで

は、関連するABNFの部分は、我々は最近、ユーザーが電話番号の一部として「+」を入力せなかったデバイスを持つ巨大な悩みを持っていたRFC 3966のうち、

global-number-digits = "+" *phonedigit DIGIT *phonedigit 
phonedigit   = DIGIT/visual-separator 
visual-separator  = "-"/"."/"("/")" 
DIGIT = "0"/"1"/"2"/"3"/"4"/"5"/"6"/"7"/"8"/"9" 

です。

3

私はではなくが電話番号でぎっしりとしているので、人々はスペースや括弧を自分のやり方で使いたいと思っています。なぜそれを数だけに制限しないのですか?そうでなければ空白/括弧などはOKですか?

また、国際電話番号で「+」文字を使用することもあります。

0

おそらくこのような何かが

"\\(?[\\d]{3}\\)?\\-?[\\d]{w}\\-?[\\d]{4}" 

良いでしょうがそれは可能だろうか国際か分からないのですが、それはあなたのアイデアを与える必要があります。あなたの問題は、奇妙な数字、ハイフン、カッコの組み合わせがたくさんあることです。

1

これはmain()メソッドにあります。このメソッドはおそらくここに投稿するためのものです。ただし、このコードを複数回実行する場合は、regexコンパイルを呼び出されたメソッドの外側に移動することを検討する必要があります。コンパイルは潜在的に高価です。 java.util.regex.Patternのは、スレッドセーフであることを

注、java.util.regex.Matcherので、標準のイディオムのようなものですされていません。

public class PhoneNumberValidator { 

    private static Pattern VALID_PHONE_NUMBER = 
     Pattern.compile("^[0-9.()-]{10,25}$"); 

    public boolean isValidPhoneNumber(String s) { 

     Matcher m = VALID_PHONE_NUMBER.matcher(s); 

     return m.matches(); 
    } 

} 
0

この正規表現は、 "^(1 [\ s - ]?)?(((\ d {3}))|(\ d {3}))[\ s - ]?\ d {3 \ "{\ s - }?\ d {4} $"これはおそらく私が実際に必要とする以上のものです。特にモバイルで働いているので、人はほとんど括弧やダッシュを使用しません。

関連する問題