電話番号を検証するための包括的な正規表現をまとめようとしています。理想は国際的なフォーマットを扱うことですが、以下のような米国のフォーマットも扱う必要があります。
私の現在の試みでお答えしますが、どなたかもっと良いもの、もっとエレガントなものをお持ちではないでしょうか。
少なくとも北米では、NANPと呼ばれる仕様のようなものがあることがわかりました。
何をしたいのかを正確に指定する必要があります。合法的な区切り文字は何でしょうか?スペース、ダッシュ、ピリオド?区切り文字は使えないのですか?区切り文字の混在は可能ですか(例:+0.111-222.3333)?拡張子(例:111-222-3333 x 44444)はどのように扱われますか。911のような特別な番号はどうなりますか。市外局番は任意ですか、必須ですか。
ここでは、7桁または10桁の数字に対する正規表現を紹介します。拡張子は許可され、区切り文字はスペース、ダッシュ、ピリオドです。
^(?:(?:\+?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+))?$