web-dev-qa-db-ja.com

標準の10桁の電話番号に一致する正規表現

次の形式をサポートする米国標準の電話番号の正規表現を書きたいです。

###-###-####
(###) ###-####
### ### ####
###.###.####

#は任意の数字を意味します。これまでに、次のような表現を思いつきました。

^[1-9]\d{2}-\d{3}-\d{4}
^\(\d{3}\)\s\d{3}-\d{4}
^[1-9]\d{2}\s\d{3}\s\d{4}
^[1-9]\d{2}\.\d{3}\.\d{4}

それぞれ。最後のものがドット付きチェックに正しいかどうかはよくわかりません。私が言及したさまざまなフォーマットに対応する4つの異なる表現の代わりに単一の表現を書くことができる方法があるかどうかも知りたいです。もしそうなら、私はどうやってそれを行うのかわからない。また、オプションのコンポーネントとして市外局番をサポートするための条件を含めることができるように、式を変更する方法もあります。何かのようなもの

+1 ### ### ####

+ 1は市外局番で、オプションです。

93
noobcoder
^(\+\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

米国以外の番号との一致を望まない場合は、

^(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$

更新:
以下のユーザーSimon Weaverが気づくように、あなたがフォーマットされていない数でのマッチングにも興味があるならば、単に[\s.-]?としてセパレーター文字クラスを任意にしてください

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

この問題にはさまざまなバリエーションが考えられます。これは私が以前にSOに置いた答えに似た正規表現です。

^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$

それは以下の例と大いに一致します。

18005551234
1 800 555 1234
+1 800 555-1234
+86 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
800 555 1234x5678
8005551234 x5678
1    800    555-1234
1----800----555-1234

電話番号の入力方法に関係なく、キャプチャグループを使用して電話番号を分類し、コード内で処理することができます。

  • グループ1:国コード(例:1または86)
  • グループ2:市外局番(例:800)
  • グループ3:交換(例:555)
  • グループ4:加入者番号(例:1234)
  • グループ5:内線番号(例:5678)

あなたが興味を持っているならば、これは表現の内訳です:

^\s*                #Line start, match any whitespaces at the beginning if any.
(?:\+?(\d{1,3}))?   #GROUP 1: The country code. Optional.
[-. (]*             #Allow certain non numeric characters that may appear between the Country Code and the Area Code.
(\d{3})             #GROUP 2: The Area Code. Required.
[-. )]*             #Allow certain non numeric characters that may appear between the Area Code and the Exchange number.
(\d{3})             #GROUP 3: The Exchange number. Required.
[-. ]*              #Allow certain non numeric characters that may appear between the Exchange number and the Subscriber number.
(\d{4})             #Group 4: The Subscriber Number. Required.
(?: *x(\d+))?       #Group 5: The Extension number. Optional.
\s*$                #Match any ending whitespaces if any and the end of string.

市外局番をオプションにするには、市外局番の(\ d {3})の後に疑問符を追加します。

101
Francis Gagnon

Jsfiddleで上記の解決策を使用して例をまとめる。クライアントの要件に従って、コードを少し修正しました。これが誰かに役立つことを願っています。

/^\s*(?:\+?(\d{1,3}))?[- (]*(\d{3})[- )]*(\d{3})[- ]*(\d{4})(?: *[x/#]{1}(\d+))?\s*$/

ここの例を参照

6
Avinash Lad

これは私が作成したかなりコンパクトなものです。

Search: \+?1?\s*\(?-*\.*(\d{3})\)?\.*-*\s*(\d{3})\.*-*\s*(\d{4})$

Replace: +1 \($1\) $2-$3

以下のユースケースに対してテスト済み。

18001234567
1 800 123 4567
1-800-123-4567
+18001234567
+1 800 123 4567
+1 (800) 123 4567
1(800)1234567
+1800 1234567
1.8001234567
1.800.123.4567
1--800--123--4567
+1 (800) 123-4567
4
Puneet Lamba

私が使う電話番号の正規表現:/^[+]?(\d{1,2})?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/

カバー:

  • 18001234567
  • 1 800 123 4567
  • +1 800 123-4567
  • +86 800 123 4567
  • 1-800-123-4567
  • 1(800)123〜4567
  • (800)123-4567
  • (800)123〜4567
  • (800)1234567
  • 800-123-4567
  • 800.123.4567
4
Yevhen Kotliar

パキスタンのユーザーのためにこれを試してください。ここに私が作成したかなりコンパクトなものがあります。

((\+92)|0)[.\- ]?[0-9][.\- ]?[0-9][.\- ]?[0-9]

以下のユースケースに対してテスト済み。

+92 -345 -123 -4567
+92 333 123 4567
+92 300 123 4567
+92 321 123 -4567
+92 345 - 540 - 5883
3
sajid

これはどう?

^(\+?[01])?[-.\s]?\(?[1-9]\d{2}\)?[-.\s]?\d{3}[-.\s]?\d{4}

編集:私は()を忘れていました。編集2:最初の3桁の部分を間違えた。

2
crimson_penguin

1、3、4の式は非常に似ているので、次のものを使用できます。

^([1-9]\d{2})([- .])(\d{3})$2(\d{4})$

使用されている正規表現の言語とブランドによっては、\2の代わりに$2を配置する必要がある場合や、そのようなマッチングがまったくサポートされていない場合があります。

醜くて不器用で数字の部分を取り出すのを難しくする明らかな^(regex for 1,3,4|regex for 2)$を除いて、これをフォーマット2と組み合わせる良い方法はありません。

市外局番については、先頭に(\+\d)?を追加して1桁の市外局番をキャプチャできます(申し訳ありませんが、市外局番の形式はわかりません)。

2
Vedran Šego

このコードは米国またはカナダの電話番号と一致し、それが有効な市外局番であることを確認して交換します。

^((\+1)?[\s-]?)?\(?[2-9]\d\d\)?[\s-]?[2-9]\d\d[\s-]?\d\d\d\d

Regex101.comでテスト

2
Shino

正規表現は通常の10桁の電話番号オプションの国際コードを検証します。 (1〜3桁)およびオプションの内線番号(任意の桁数):

/(\+\d{1,3}\s?)?((\(\d{3}\)\s?)|(\d{3})(\s|-?))(\d{3}(\s|-?))(\d{4})(\s?(([E|e]xt[:|.|]?)|x|X)(\s?\d+))?/g

デモ: https://www.regextester.com/103299

有効なエントリ:

/* Full number */
+999 (999) 999-9999 Ext. 99999

/* Regular local phone number (XXX) XXX-XXXX */
1231231231
123-1231231
123123-1231
123-123 1231
123 123-1231
123-123-1231
(123)123-1231
(123)123 1231
(123) 123-1231
(123) 123 1231

/* International codes +XXX (XXX) XXX-XXXX */
+99 1234567890
+991234567890

/* Extensions (XXX) XXX-XXXX Ext. XXX... */
1234567890 Ext 1123123
1234567890Ext 1123123
1234567890 Ext1123123
1234567890Ext1123123

1234567890 Ext: 1123123
1234567890Ext: 1123123
1234567890 Ext:1123123
1234567890Ext:1123123

1234567890 Ext. 1123123
1234567890Ext. 1123123
1234567890 Ext.1123123
1234567890Ext.1123123

1234567890 ext 1123123
1234567890ext 1123123
1234567890 ext1123123
1234567890ext1123123

1234567890 ext: 1123123
1234567890ext: 1123123
1234567890 ext:1123123
1234567890ext:1123123

1234567890 X 1123123
1234567890X1123123
1234567890X 1123123
1234567890 X1123123
1234567890 x 1123123
1234567890x1123123
1234567890 x1123123
1234567890x 1123123
2
bcngr

@ Raviの答えから始めて、私はいくつかの NPA(Area)Codeの検証規則 も適用しました。

特に:

  • それは2(またはそれ以上)で始まるべきです
  • 2桁目と3桁目に "11"を含めることはできません(N11)。

予約済みブロック(N9X、37X、96X)および555など、他にもいくつか制限がありますが、特に予約済みブロックで将来使用される可能性があるため、555はテストに役立ちます。

これが私が思いついたものです。

^((\+\d{1,2}|1)[\s.-]?)?\(?[2-9](?!11)\d{2}\)?[\s.-]?\d{3}[\s.-]?\d{4}$

代わりに、空白の値と一致させたい場合(フィールドが必須ではない場合)、次のようにします。

(^((\+\d{1,2}|1)[\s.-]?)?\(?[2-9](?!11)\d{2}\)?[\s.-]?\d{3}[\s.-]?\d{4}$|^$)

私の有効な数値のテストケース(@Francisの回答からの多く)は、次のとおりです。

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

私の無効なテストケースは次のとおりです。

(003) 555-1212     // Area code starts with 0
(103) 555-1212     // Area code starts with 1
(911) 555-1212     // Area code ends with 11
180055512345       // Too many digits
1 800 5555 1234    // Prefix code too long
+1 800 555x1234    // Invalid delimiter
+867 800 555 1234  // Country code too long
1-800-555-1234p    // Invalid character
1 (800)  555-1234  // Too many spaces
800x555x1234       // Invalid delimiter
86 800 555 1212    // Non-NA country code doesn't have +

私の正規表現には、数字グループを抽出するためのグループ化は含まれていませんが、それらを含めるように変更することができます。

1
MCattle

おそらく最も簡単なものは他のいくつかと比較します。

\(?\d+\)?[-.\s]?\d+[-.\s]?\d+

次のものと一致します。

(555)444〜6789

555-444-6789

555.444.6789

555 444 6789

1
MITHU

「+」で複数の番号を付け、「;」でそれらを区切ります。 "、" " - "、または ""の文字

0
radeveloper

私はこの正規表現が10桁の連絡先番号にとって最も有用であると思います。

^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}$

説明:

enter image description here

0
Amitesh

私はになった

const regexBase = '(?:\\+?(\\d{1,3}))?[-. (]*(\\d{3})?[-. )]*(\\d{3})[-. ]*(\\d{4,5})(?: *x(\\d+))?'; const phoneRegex = new RegExp('\\s*' + regexBase + '\\s*', 'g');

これはオランダの数字のようなものを考慮するためでした、例えば

+358 300 20200

0
Kelly Milligan

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

これらの電話番号と一致します。

1-718-444-1122
718-444-1122
(718)-444-1122
17184441122
7184441122
718.444.1122
1718.444.1122
1-123-456-7890
1 123-456-7890
1 (123) 456-7890
1 123 456 7890
1.123.456.7890
+91 (123) 456-7890
18005551234
1 800 555 1234
+1 800 555-1234
+86 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
18001234567
1 800 123 4567
1-800-123-4567
+18001234567
+1 800 123 4567
+1 (800) 123 4567
1(800)1234567
+1800 1234567
1.8001234567
1.800.123.4567
+1 (800) 123-4567
18001234567
1 800 123 4567
+1 800 123-4567
+86 800 123 4567
1-800-123-4567
1 (800) 123-4567
(800)123-4567
(800) 123-4567
(800)1234567
800-123-4567
800.123.4567
1231231231
123-1231231
123123-1231
123-123 1231
123 123-1231
123-123-1231
(123)123-1231
(123)123 1231
(123) 123-1231
(123) 123 1231
+99 1234567890
+991234567890
(555) 444-6789
555-444-6789
555.444.6789
555 444 6789
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
(003) 555-1212
(103) 555-1212
(911) 555-1212
18005551234
1 800 555 1234
+86 800-555-1234
1 (800) 555-1234

regex101.com を参照してください。

0
stomy

これは私が考えることができるのと同じくらい多くにマッチし、あなたに国、地域、最初と最後のためにあなたにグループマッチングを与えるより包括的なバージョンです。

(?<number>(\+?(?<country>(\d{1,3}))(\s|-|\.)?)?(\(?(?<region>(\d{3}))\)?(\s|-|\.)?)((?<first>(\d{3}))(\s|-|\.)?)((?<last>(\d{4}))))
0
jake
^(\+1)?\s?(\([1-9]\d{2}\)|[1-9]\d{2})(-|\s|.)\d{3}(-|\s|.)\d{4}
0
amalgamate