米国の電話番号の確認
-
05-07-2019 - |
質問
フォローアップのために米国の電話番号の入力を必要とするウェブサイトのフォームがあります。これはこの場合非常に必要です。迷惑データ 330-000-0000 を入力するユーザーを排除したいと思います。私はあなたのために電話番号を検証するサードパーティのオプションを見てきましたが、それがこの状況に最適なオプションであればidkです。ただし、これらのサードパーティのいずれかを使用しており、ここで高く評価される推奨事項を作成できる場合。
ただし、受信した迷惑電話番号を絞り込むために、一連のルールに対して番号を確認することを検討しています。
- 555番号ではない
- 7桁の同一の数字を含まない
- 有効な市外局番(これはすぐに利用可能です)
- 123-1234または123-4567ではありません
- 867-5309(heh * )を数えることもできると思います >
これにより、ユーザーが電話番号を入力できないと考えられる状況が発生しますか?電話番号に含めるべきではない他のルールについて考えていただけますか?他に考えはありますか?
解決
私は、あなたがこれよりも多くの努力をしているように思えます。考慮:
電話番号を誤って入力しないようにすることを目的とする場合、おそらく非常に簡単なチェックで90%をはるかに超える数字をキャッチできます。
その情報を提供したいかどうかにかかわらず、ユーザーに有効な番号を提供するように強制することを目的とする場合、100%正確にアクセスできたとしても、あなたは絶望的な仕事を引き受けました2番目の電話会社データベースを使用して、入力した正確な番号が現在有効であることを確認しても、提供した番号が自分のものであるという保証はありません。繰り返しますが、単純なチェックは偽の番号を入力する人々の大部分を阻止しますが、2、3回以上試行することをいとわない人は、番号を取得する試みを打ち負かす方法を見つけます。
いずれにせよ、簡単なテストで良い結果が得られ、より複雑なルールセットに進むと時間がかかりますが、益はほとんどなくなります(また、< !> quot; 7桁の同じ数字<!> quot;および867-5309ケース)。
他のヒント
正規表現を使用して、アプリの内部で電話番号の検証を行うことができます。言語に応じて、指定された電話番号が式と一致する場合にtrueを返す関数を呼び出すことができます。
PHPの場合:
function phone_number_is_valid($phone) {
return (eregi('^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$', $phone));
}
オンラインでさまざまな正規表現を検索できます。 http://regexlib.com/DisplayPatternsで上記の1つを見つけました。 .aspx?categoryId = 7 <!> amp; cattabindex = 2
編集:正規表現の言語固有のサイト:
市外局番を確認できる場合は、本当に本当に電話番号を知る必要がある場合を除いて、おそらく合理的な範囲であなたがしていることをたぶんします。
Amybeがこの質問の回答をご覧ください。
867-5309は、異なる市外局番の人に割り当てられる有効な電話番号です。
Djangoには、localflavorという素敵な小さなcontribパッケージがあります。これには、郵便番号や電話番号など、国固有の検証コードがたくさんあります。ソースを見て、djangoがこれらをどのように処理したいかを確認してください。例: USフォーム検証。これは、あなたがあまり知らない国についての情報の素晴らしい頼りになることもあります。
あなたの顧客は今でも私ができることをすることができます。それは地元の映画電話番号を提供することです。
また、プレフィックスが1で始まるため、123-1234または123-4567は無効な数字にすぎませんが、234-5678または234-1234は実際には有効です(偽に見えますが)。
米国およびカナダ形式の数字のみを使用している場合、次の正規表現が機能する可能性があります。 [2-9] [0-9] [0-9]-[2-9] [0-9] [0-9]-[0-9] [0-9] [0-9] [0- 9] <!> amp; ![2-9] [0-9] [0-9] -555- [0-9] [0-9] [0-9] [0-9]
また、現在一部の地域で使用されている10桁のダイヤルを考慮する必要があります。これは、長距離ダイヤル(つまり、1-303-555-1234ではなく、303-555-1234)とは異なります。 )。一部の地域では、有効な電話番号は10桁です。他では7です。
これらのパラメータは私にはかなり良いように見えますが、911から始まる数字を避けるためにも安全です。
私の研究では、事前に<!> gt;。<!> lt; 7つの同じ数字が有効な電話番号であることがわかりました。そのため、そのルールを除外できます。
これは、私が使用するクイック関数です(以下)。毎月更新されるエリアコードとプレフィックスデータを含む郵便番号データベースにアクセスできます。市外局番のプレフィックスが存在することを確認するために、データのディップを行うことをよく考えました。
public static bool isPhone(string phoneNum)
{
Regex rxPhone1, rxPhone2;
rxPhone1 = new Regex(@"^\d{10,}$");
rxPhone2 = new Regex(@"(\d)\1\1\1\1\1\1\1\1\1");
if(phoneNum.Trim() == string.Empty)
return false;
if(phoneNum.Length != 10)
return false;
//Check to make sure the phone number has at least 10 digits
if (!rxPhone1.IsMatch(phoneNum))
return false;
//Check for repeating characters (ex. 9999999999)
if (rxPhone2.IsMatch(phoneNum))
return false;
//Make sure first digit is not 1 or zero
if(phoneNum.Substring(0,1) == "1" || phoneNum.Substring(0,1) == "0")
return false;
return true;
}
これが適切な場所であるかどうかはわかりません。検証関数ではなくフォーマット関数です。コミュニティと共有しましょう。いつか役立つかもしれません。
Private Sub OnNumberChanged()
Dim sep = "-"
Dim num As String = Number.ToCharArray.Where(Function(c) Char.IsDigit(c)) _
.ToArray
Dim ext As String = Nothing
If num.Length > 10 Then ext = num.Substring(10)
ext = If(IsNullOrEmpty(ext), "", " x" & ext)
_Number = Left(num, 3) & sep & Mid(num, 4, 3) & sep & Mid(num, 7, 4) & ext
End Sub
私の検証関数は次のようなものです:
Public Shared Function ValidatePhoneNumber(ByVal number As String)
Return number IsNot Nothing AndAlso number.ToCharArray. _
Where(Function(c) Char.IsNumber(c)).Count >= 10
End Function
この最後の関数を、エンティティのOnNumberChanging(number As String)メソッドで呼び出します。
米国および国際電話の検証には、このコードが最も適していることがわかりました。
((\+[1-9]{1,4}[ \-]*)|(\([0-9]{2,3}\)[ \-]*)|([0-9]{2,4})[ \-]*)*?[0-9]{3,4}?[ \-]*[0-9]{3,4}?$
(やや古くなっていますが)ディスカッションこちらを見つけることができます。