7

フォローアップのために米国の電話番号を入力する必要がある Web サイト フォームがあります。この場合、これは非常に重要です。迷惑データ330-000-0000を入力するユーザーを排除したい。電話番号を検証するサードパーティのオプションをいくつか見てきましたが、それがこの状況に最適なオプションであるかどうかはわかりません. ただし、これらのサードパーティのいずれかを使用したことがあり、ここでも大歓迎です。

ただし、一連のルールに照らして番号をチェックして、受信した迷惑電話番号を絞り込むことを検討しています.

  • 555番号ではありません
  • 7 つの同一の数字を含まない
  • 有効な市外局番 (これはすぐに入手できます)
  • 123-1234 または 123-4567 ではない
  • 867-5309も数えられるかな(へー* )

これにより、ユーザーが電話番号を入力できないと考えられる状況が発生しますか? 電話番号に含めてはいけないルールが他にあると思いますか? 他の考えはありますか?

4

13 に答える 13

9

必要以上に力を入れているように思えます。検討:

電話番号の入力ミスを防ぐことが目的の場合、非常に簡単なチェックだけで 90% 以上の番号を検出できる可能性があります。

あなたの目的が、ユーザーがその情報を提供したいかどうかに関係なく、有効な番号を提供するよう強制することである場合、100% 正確な最新の番号にアクセスできたとしても、絶望的な仕事を引き受けることになります。入力された正確な番号が現在有効であることを確認するために 2 番目の電話会社のデータベースを使用しても、彼らが提供した番号が自分のものであるという保証は得られません。繰り返しますが、簡単なチェックで偽の番号を入力する人の大部分は失敗しますが、2、3 回以上試してみたい人は、番号を取得しようとするあなたの試みを打ち負かす方法を見つけるでしょう。

いずれにせよ、単純なテストでは良い結果が得られますが、より複雑なルール セットに進むと、ますます多くの時間がかかりますが、メリットはますます少なくなります (また、「同じ数字」および 867-5309 ケース)。

于 2008-10-06T20:50:19.160 に答える
3

正規表現を使用して、アプリ内で電話番号の検証を行うことができます。言語によっては、指定された電話番号が式と一致する場合に 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.aspx?categoryId=7&cattabindex=2で上記のものを見つけました

編集:正規表現のためのいくつかの言語固有のサイト:

于 2008-10-06T18:16:08.300 に答える
1

たぶん、この質問に対する答えを見てください。

于 2008-10-06T18:18:06.957 に答える
1

あなたの顧客は、ローカルの moviefone 番号を提供するという私と同じことを引き続き行うことができます。

また、123-1234 または 123-4567 はプレフィックスが 1 で始まるため、無効な番号にすぎませんが、234-5678 または 234-1234 は実際には有効です (偽のように見えますが)。

于 2008-10-06T18:18:39.607 に答える
1

867-5309 は、さまざまな市外局番の人に割り当てられている有効な電話番号です。

于 2008-10-06T18:11:58.607 に答える
1

市外局番を確認できる場合は、本当に電話番号を知る必要がない限り、おそらく合理的な範囲で行っています.

于 2008-10-06T18:15:17.507 に答える
1

Django には localflavor と呼ばれる小さな contrib パッケージがあり、これには郵便番号や電話番号など、国固有の検証コードが多数含まれています。ソースを見て、使用したい国で django がこれらをどのように処理するかを確認することもできます。例:米国フォームの検証。これは、あなたがほとんど知らない国についての情報を得るための優れた手段にもなります。

于 2008-10-06T18:22:58.413 に答える
0

これが適切な場所であるかどうかはわかりません。これは検証機能ではなくフォーマット機能です。コミュニティと共有しようと思いました。いつか役立つかもしれません..

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) メソッドと呼びます。

于 2009-10-29T06:03:18.513 に答える
0

米国とカナダの形式の数字だけに固執している場合は、次の正規表現が機能すると思います: [2-9][0-9][0-9]-[2-9][0-9][ 0-9]-[0-9][0-9][0-9][0-9] & ![2-9][0-9][0-9]-555-[0-9] [0-9][0-9][0-9]

于 2008-10-06T18:13:33.173 に答える
0

また、一部の地域で現在使用されている 10 桁のダイヤルも考慮する必要があります。これは、長距離ダイヤル (つまり、1-303-555-1234 ではなく 303-555-1234) とは異なります。一部の地域では、有効な電話番号の長さは 10 桁です。他の人では、それは7です。

于 2008-10-06T18:14:35.480 に答える
0

これは私が使用する簡単な機能です (以下)。毎月更新される市外局番とプレフィックス データを含む郵便番号データベースにアクセスできます。市外局番のプレフィックスが存在することを確認するために、データディップを行うことをよく考えました。

    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;

    }
于 2009-10-04T18:00:13.783 に答える
0

米国および国際電話の検証では、次のコードが最も適していることがわかりました。

((\+[1-9]{1,4}[ \-]*)|(\([0-9]{2,3}\)[ \-]*)|([0-9]{2,4})[ \-]*)*?[0-9]{3,4}?[ \-]*[0-9]{3,4}?$

ここで (やや時代遅れではありますが) ディスカッションを見つけることができます

于 2010-11-12T20:36:27.803 に答える
-1

これらのパラメーターは私にはかなり良さそうに見えます。安全のために、911 で始まる番号も避けるかもしれません。

于 2008-10-06T18:17:36.113 に答える