1. ホーム
  2. javascript

[解決済み】JavaScriptで電話番号を検証する

2022-04-16 22:05:39

質問

あるサイトでこのコードを見つけたのですが、完璧に動作します。このコードは、電話番号が以下のいずれかの形式であることを検証します。

(123) 456-7890 または 123-456-7890

問題は、私のクライアントが(なぜかわからないが、たぶんクライアントのことだろう)、別のフォーマットを追加したいことだ。 1234567890 .

この正規表現を使っています。

/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/

別のフォーマットも検証することを追加するにはどうしたらよいでしょうか。正規表現が苦手なんです。

どのように解決するのですか?

まず第一に、あなたのフォーマットバリデータは、明らかに NANP (国番号+1)の番号です。 このアプリケーションは、北米以外の国の電話番号を持つ人が使用するのでしょうか? もしそうなら、そのような人が完全に有効な[国際]番号を入力できないようにすることはできません。

次に、バリデーションが正しくありません。 NANP番号は次のような形式です。 NXX NXX XXXX ここで N は2-9の数字であり X は0-9の数字です。 また、市外局番や交換局番は、以下のような形式をとらないことがあります。 N11 (特別なサービスとの混同を避けるため、1が2つで終わる)。 ただし 非地域コード(800, 888, 877, 866, 855, 900)の番号には、その番号の前に N11 を交換します。

つまり、有効な電話番号ではないにもかかわらず、正規表現は (123) 123 4566という数字を渡してしまうのです。 これを修正するには \d{3}[2-9]{1}\d{2} .

最後に、あなたはWebブラウザでユーザーの入力を検証しているように感じます。 クライアントサイドの検証は のみです。 利便性 ユーザーに提供する それでも、サーバー上ですべての入力を (再度) 検証する必要があります。

TL;DR に正規表現を使ってはいけません。 電話番号のような複雑な実世界のデータを検証する。 または URL . を使用します。 専門ライブラリ .