web-dev-qa-db-ja.com

有効な国際携帯電話番号の正規表現

Clickatellを使用して、クライアントの携帯電話にSMSを送信します。

すべての有効な携帯電話番号に対して標準化された正規表現がありますか? +27 123 4567?私は自分で転がしますが、あいまいで有効な電話番号の形式を見逃すのが心配です。

21
Petrus Theron

入力から「+」と数字を除くすべての文字を除去した後、これを行う必要があります。

^\+[1-9]{1}[0-9]{3,14}$

国コードをより正確にしたい場合は、この質問を参照してください 電話番号の国コードのリスト

ただし、検証については厳しすぎないようにします。有効な番号が受け入れられないと言われた場合、ユーザーは非常にイライラします。

26

文字列のサブセット「有効な電話番号」に正確に一致する正規表現を書いたとしても、それらが有効であることを(正規表現によって)保証する方法はありませんmobile電話番号。いくつかの国では、少なくとも番号計画のルックアップがなければ、携帯電話番号は固定電話番号と区別できません。場合によっては、それでも役に立たないことがあります。たとえば、スウェーデンでは、多くの人が通常の固定電話のような電話番号を携帯電話に「移植」しています。まだ以前と同じ数ですが、今では固定電話の代わりに携帯電話に行きます。

有効な電話番号は数字のみで構成されているため、独自の番号をローリングすると、少なくとも電話番号の不明瞭なケースを見逃すリスクがあるとは思いません。より確実にしたい場合は、すべての有効な国コードのリストを取得し、生成された正規表現と一致する電話番号の先頭にある国コードの1つを要求するジェネレーターを作成します。

5
a CVn
^\+[1-9]{1}[0-9]{7,11}$ 

正規表現^\+[1-9]{1}[0-9]{7,11}$は、「+ 290 8000」および8桁より短い同様の有効な番号に対して失敗します。

最長の番号は、3桁の国番号、3桁の市外局番、8桁の加入者番号などで、14桁になります。

2
dave singer

将来これを検討しているユーザー向けに、ここにメモを投稿します。 Googleのlibphonenumberは、おそらく使用したいものです。 Googleが収集したデータを使用するPHP、node.js、Javaなどのラッパーがあり、適用する正規表現パターンの大きな配列を維持するための要件を減らします。

2

国際電話番号についてですが、コードは次のようになります。

/^(\+|\d)[0-9]{7,16}$/;

「00」で始まる国際番号も使用できるためです。

15桁を好む理由: http://en.wikipedia.org/wiki/E.164

2
Nasaralla

//正規表現-シンガポールの有効な携帯電話番号を確認します

public static boolean isSingaporeMobileNo(String str) {
    Pattern mobNO = Pattern.compile("^(((0|((\\+)?65([- ])?))|((\\((\\+)?65\\)([- ])?)))?[8-9]\\d{7})?$");
    Matcher matcher = mobNO.matcher(str);
    if (matcher.find()) {
        return true;
    } else {
        return false;
    }
}
0
John