web-dev-qa-db-ja.com

電話番号に使用できる特殊文字は何ですか?

したがって、カナダ、米国、インド、英国などのユーザーを含むグローバルユーザーに使用するWebページを設計しています。この電話番号フィールドに検証を適用する必要がありますが、これを行うための最良の方法がわかりません。

私が考えることができる有効なフォーマットのいくつかは:

  1. 1800123456(インド)
  2. 米国の電話番号での「-」の使用

ユーザーが入力できるようにする必要のある特殊文字について少し混乱しています(例:- / ())。過去に他の人はこれをどのように解決しましたか?

21
Ranger

あなたがcanを制約する(それがプログラマーとしてコードを書くために支払われるものである)からといって、実際にこれを行う必要があるという意味ではありません。

数値を検証する意味は何ですか?なぜそれが役立つのですか?ユーザーが「0800DIALTHIS」、「私は電話番号を持っていない」、または「(499)123-45-67добавочный4425」と入力すると失敗しますか?ユーザーは電話での連絡方法に関する重要な情報を伝えたかっただけですが、それは間違いなく(「グローバル」と言います。そうではありませんか?)。

また、データの保存方法は、使用方法によって管理する必要があります。数字をどのように使用しますか?自動送信に使用されますかSMS spam—またはマネージャーによって手動でダイヤルされますか?後者の場合、追加の文字を許可しても問題ありません。人間の脳は最も適切な方法でそれらを解析します。この場合、検証は本当に不要であり、人間のユーザーを困らせるだけです。

21
P Shved

国によってフォーマットが異なるため、数値が有効かどうかを知るのは非常に困難です。たとえば、フランスでは、06 12 34 56 78は有効な電話番号ですが、00 12 34 56 78は有効ではありません。番号は01から09までしか開始できないため、06と07は携帯電話です。

また、電話番号は同じ国でもいくつかの形式で記述できます。私は見た:

  • 06 12 34 56 78
  • 0612345678
  • 06.12.34.56.78
  • 06-12-34-56-78
  • +33612345678
  • +33(0)6 12 34 56 78

最後の2つは国際形式です。

一般に:

  1. 角かっこを許可、+記号は、先頭文字、ダッシュ、ドット、コンマ、スペースとしてのみ使用できます。
  2. 可能であれば、正規化された形式(+33(0)612345678)のみを覚えてください。
  3. これが不可能な場合は、少なくともスペースなどの区切り文字を削除してください。

国ごとの検証に深く入り込むことはお勧めしません。ルールがたくさんあるだけでなく、ルールも変わります。たとえばフランスでは、数年前に07または09で始まる電話番号はありませんでした。携帯電話の数の増加により07が登場しました。VoIPサービスでは09が登場しました。

特別な番号を考慮に入れることもできます。たとえば、3635は、4桁しかなく、ゼロ以外で始まる場合でも、フランスでは有効な数値です。

7

文字を制限しないでください。彼があなたに与えるすべてを取る。ただし、ダイヤルするときは、数字だけを使用してください。それでもうまくいかないかもしれません。 123-4567-9が内線番号ではなく、1234567から1234569の範囲の番号を意味することを知った1年前にタイにいました。電話会社が余分な数字を無視したため、「12345679」をダイヤルしたときは機能しました。何でも、数字だけをダイヤルしてください。

新しい電話で電話番号にスペースを使用できるのが気に入っています。 「123 456 7890」と同じように入力できますが、すべてをつぶすことはできません。

4
Andy Canfield

グーグルはこれのためのlibを持っています:

国際電話番号の解析、フォーマット、検証のためのGoogleの一般的なJava、C++、JavaScriptライブラリ。

https://github.com/googlei18n/libphonenumber

これは最善の努力をします。これは決して簡単な作業ではないので、処理されないケースがあるに違いないと思います。ユーザーに数字と文字の入力を許可し、後でコードを使用して文字を削除します。

1

大括弧、ダッシュ、およびスペース。

ユーザーがこれらの記号を含む電話番号を入力すると、国固有のルール(国ごとにこれらのルールを収集する必要があります)に従ってそれらを検証し、非数字を実際にドロップすることができますソフトウェアで内部的に処理されます。

これは、IDD(国際直通ダイヤル)では、数字のパンチングの一時停止を除いて、番号のダイヤルに実際に使用する「特殊文字」を要求することが不可能になるためです。

(私はこれについてまったく知識がありません。間違っている場合は修正してください。)

0
rwong

検証する必要があるのは桁数だけです-呼び出す必要があるものと一致しますか?

アクセスコードは、ユーザーによる入力を許可することも許可しないこともできます(つまり、米国の場合は+1)。理由をお話しします。アメリカ人が入国していて、それほど精通していなければ、おそらく1ではなく001を入力したいと思うでしょう。理由は、00が米国内から国際番号にアクセスする方法だからです。彼らはそれと+1の違いが何であるかを知りません。市外局番間(および場合によっては同じ市外局番内)の固定電話に発信する場合は、その番号の前に1も入力します。日本のように。

日本を取る。地方の固定電話は、正面が0でアクセスされます。ただし、日本国外からダイヤルする場合は、0は必要ありません。

中国の携帯電話番号は10桁、香港では8桁です。フォームが国をキャプチャしている場合は、番号の最初に国コードを要求しないでください-すぐ隣の読み取り専用テキストで自動表示するだけです入力する必要がある数。

リストは続く。

桁数を検証し(文字が受け入れられないことを確認)、エンドユーザーが正しい桁数を簡単に入力できるようにします。つまり国コードを入力する必要はありません。フォームが非常にスマートな場合は、固定電話番号の場合は市外局番も入力する必要はありません。または、日本語の数字の前に0のようなアクセスコードのようなものを入力し始めた場合は、その必要がないことを伝えます。

数字以外のすべての文字は、問題点になるはずです-彼らはそれらを入力する機会がありません。

0
Todd Main