web-dev-qa-db-ja.com

電話検証正規表現

このパターンを使用して、電話番号の検証を確認しています

^[0-9\-\+]{9,15}$

0771234567および+0771234567で機能しますが、077-1234567および+077-1234567および+ 077-1-23-45-67および+ 077-123-で機能するようにします45-6-7

パターンで何を変更する必要がありますか?

51
Nir

このSO投稿を参照してください

電話番号のjqueryの正規表現の例

/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/
  • (123)456 7899
  • (123).456.7899
  • (123)-456-7899
  • 123-456-7899
  • 123 456 7899
  • 1234567899

サポートされています

36
Gent

enter image description here このソリューションは、数値と形式を実際に検証します。例:123-456-7890は有効な形式ですが、有効な米国番号ではありません


拡張機能が必要ない場合は、括弧を含めて次を削除します。(?:\ s *(?:#| x。?| ext。?| extension)\ s *(\ d +)\ s *)? :)

edit(補遺)これはクライアント側のみのアプリケーションで必要だったため、変換しました。ここでは、javascriptのユーザー向けです。

var myPhoneRegex = /(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]‌​)\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]‌​|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})\s*(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+)\s*)?$/i;
if (myPhoneRegex.test(phoneVar)) {
    // Successful match
} else {
    // Match attempt failed
}

hth。 編集の終了

これにより、拡張子の有無が許可され、.NETで動作します

(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]‌​)\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]‌​|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$

末尾のスペースの有無にかかわらず検証します。おそらく、.NETバリデーターを使用し、サーバー側をトリミングする場合、このわずかに異なる正規表現を使用します。

(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]‌​)\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]‌​|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})\s*(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+)\s*)?$

すべて有効:

1 800 5551212

800 555 1212

8005551212

18005551212

+1800 555 1212内線65432

800 5551212 ext3333

無効な#s

234-911-5678

314-159-2653

123-234-5678


EDIT:フェリペのコメントに基づき、私はこれを国際版に更新しました。

有効なグローバル番号に関する here および here からわかったことに基づいて

もちろん、これは最初の防衛線としてテストされています。国際番号の最も重要な要素は、15文字以下であることです。すべての非数字の置換を作成して結果を合計しませんでした。完全を期すために行う必要があります。また、北米の正規表現とこれを組み合わせていないことに気付くかもしれません。理由は、この国際正規表現が北米の数値と一致するためです、#などの既知の無効な+1 234-911-5678も受け入れます。より正確な結果を得るには、それらも分離する必要があります。

一時停止およびその他のダイヤル機器は記載されていないため、E.164ごとに無効です

\(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})?

内線番号が1〜10文字、内線番号が1〜6桁の場合:

\(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})? ?(\w{1,10}\s?\d{1,6})?

有効な国際:refの国名が一致しません。

+55 11 99999-5555ブラジル

+593 7 282-3889エクアドル

(+44)0848 9123 456UK

+1284852 5500BVI

+1345 9490088グランドケイマン

+32 2 702-9200ベルギー

+65 6511 9266アジア太平洋

+86 21 2230 1000上海

+9124 4723300インド

+821012345678韓国

そしてあなたの拡張の喜びのために

+55 11 99999-5555 ramal 123ブラジル

+55 11 99999-5555 foo786544ブラジル

楽しい

21
Joe Johnston

考慮してください:

^\+?[0-9]{3}-?[0-9]{6,12}$

これは、最初に+のみを許可します。 3桁の数字と、オプションのダッシュ、さらに6〜12桁の数字が必要です。

元の正規表現では、70+12---12+92などの「電話番号」が許可されていることに注意してください。


以下を追加するために質問が修正されました。

+ 077-1-23-45-67および+ 077-123-45-6-7

おそらく、代替をサポートする正規表現システムを使用する必要があります。

^\+?[0-9]{3}-?([0-9]{7}|[0-9]-[0-9]{2}-[0-9]{2}-[0-9]{2}|[0-9]{3}-[0-9]{2}-[0-9]-[0-9])$

最初の選択肢は7桁です。 2番目は1-23-45-67です。 3番目は123-45-6-7です。これらはすべて、オプションのプラス+の後に3桁の数字とオプションのダッシュ-プレフィックスが続きます。

以下のコメントは別のパターンに言及しています:

+ 077-12-34-567

一般的なパターンがどうあるべきかはまったく明確ではありません-ダッシュで区切られた1つ以上の数字。前後の数字?

^\+?[0-9]{3}-?[0-9](-[0-9]+)+$

これにより、 '+ 077-'プレフィックスの後に、ダッシュと交互に数字のシーケンスが続き、各ダッシュの間に少なくとも1桁の数字があり、最後にダッシュはありません。

8
/^[0-9\+]{1,}[0-9\-]{3,15}$/

最初は数字または+、次にいくつかの数字または-

最初に文字列の長さをテストして、9〜15であるかどうかを確認します。

次に、この正規表現を使用して検証します。

^\+?\d+(-\d+)*$

これはnormal* (special normal*)*パターンのさらに別のバリエーションで、normal\dであり、special-です。

5
fge

+-whitespace、および()の数字のみをユーザーが入力できるようにする、より一般的な正規表現があります。括弧のバランスを尊重し、記号の後に常に数字があります。

^([+]?[\s0-9]+)?(\d{3}|[(]?[0-9]+[)])?([-]?[\s]?[0-9])+$

false, ""
false, "+48 504 203 260@@"
false, "+48.504.203.260"
false, "+55(123) 456-78-90-"
false, "+55(123) - 456-78-90"
false, "504.203.260"
false, " "
false, "-"
false, "()"
false, "() + ()"
false, "(21 7777"
false, "+48 (21)"
false, "+"
true , " 1"
true , "1"
true, "555-5555-555"
true, "+48 504 203 260"
true, "+48 (12) 504 203 260"
true, "+48 (12) 504-203-260"
true, "+48(12)504203260"
true, "+4812504203260"
true, "4812504203260
5
haroldolivieri

私は試した :

^(1[ \-\+]{0,3}|\+1[ -\+]{0,3}|\+1|\+)?((\(\+?1-[2-9][0-9]{1,2}\))|(\(\+?[2-8][0-9][0-9]\))|(\(\+?[1-9][0-9]\))|(\(\+?[17]\))|(\([2-9][2-9]\))|([ \-\.]{0,3}[0-9]{2,4}))?([ \-\.][0-9])?([ \-\.]{0,3}[0-9]{2,4}){2,3}$

1-97のような特別な国コードも扱いました...ここに私がテストした数字があります(Puneet LambaとMCattleから):

***** PASS *****
18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1.800.555.1234
+1.800.555.1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234
(+230) 5 911 4450
123345678
(1) 345 654 67
+1 245436
1-976 33567
(1-734) 5465654
+(230) 2 345 6568
***** CORRECTLY FAILING *****
(003) 555-1212
(103) 555-1212
(911) 555-1212
1-800-555-1234p
800x555x1234
+1 800 555x1234
***** FALSE POSITIVES *****
180055512345
1 800 5555 1234
+867 800 555 1234
1 (800)  555-1234
86 800 555 1212

もともとここに投稿: 標準の10桁の電話番号に一致する正規表現

4
Ludovic Agathe
^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$

次の場合に一致します。

123-456-7890

(123)456-7890

123 456 7890

123.456.7890

+91(123)456-7890

3
Sanjaysinh Zala

@Joe Johnstonの答えに加えて、これも受け入れます:

+16444444444,,241119933

(ダイヤルインに対するAppleの特殊文字サポートに必要- https://support.Apple.com/kb/PH18551?locale=en_US

\(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})? ?([\w\,\@\^]{1,10}\s?\d{1,10})?

注:拡張コードには最大10桁まで使用できます

0
Ravi
The following regex matches a '+' followed by n digits


    var mobileNumber = "+18005551212";
    var regex = new RegExp("^\\+[0-9]*$");
    var OK = regex.test(mobileNumber);

    if (OK) {
      console.log("is a phone number");
    } else {
      console.log("is NOT a phone number");  
    }
0
appsmatics
  ^[0-9\-\+]{9,15}$ 

0 + 0 + 0 + 0 + 0 + 0、または000000000などに一致します。

  (\-?[0-9]){7}

特定の桁数と一致し、その中の任意の位置にオプションのハイフンが付きます。

この+077形式はどうなっているのでしょうか?

有効な形式ではありません。 0で始まる国コードはありません。

+の後の数字は、通常1〜3桁の長さの国コードである必要があります。

「+」、国コードCC、オプションのハイフン、「0」に2桁、さらにハイフンと次の7桁の数字を許可して、次を試してください。

  ^\+CC\-?0[1-9][0-9](\-?[0-9]){7}$

ああ、{3,3}は冗長で、{3}に単純化されます。

0
g1smd
0
an-apluss

この正規表現は、共通フォーマット1999)-999-9999およびその間の任意のものと---(任意の数に一致します。また、正規表現はブレースを許可またはブレースなしおよびピリオドスペースまたはダッシュで区切られます。 "^([01][- .])?(\(\d{3}\)|\d{3})[- .]?\d{3}[- .]\d{4}$"

0
umbreon222
^+?\d{3}-?\d{2}-?\d{2}-?\d{3}$

これを試してみてください。

これはどうですか。..これが役立つことを願っています...

^(\\+?)\d{3,3}-?\d{2,2}-?\d{2,2}-?\d{3,3}$
0
Premanshu