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

標準の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 ### ### ####

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

ベストアンサー1

^(\+\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}$

https://regex101.com/r/j48BZs/2

おすすめ記事