سؤال

لدي نموذج موقع ويب يتطلب إدخال رقم هاتف أمريكي لأغراض المتابعة ، وهذا ضروري للغاية في هذه الحالة. أريد محاولة التخلص من المستخدمين الذين يدخلون بيانات غير مرغوب فيه 330-000-0000. لقد رأيت بعض الخيارات للأطراف الثالثة التي تحقق صحة أرقام الهواتف لك ، ولكن IDK إذا كان هذا هو الخيار الأفضل لهذا الموقف. ومع ذلك ، إذا كنت قد استخدمت واحدة من هذه الأطراف الثالثة ويمكنك تقديم توصية من شأنها أن تكون موضع تقدير كبير هنا.

ومع ذلك ، أفكر في التحقق من الرقم مقابل مجموعة من القواعد لمجرد محاولة تضييق أرقام الهواتف غير المرغوب فيها.

  • ليس رقم 555
  • لا يحتوي على 7 أرقام متطابقة
  • رمز المنطقة الصالح (هذا متاح بسهولة)
  • ليس 123-1234 أو 123-4567
  • أعتقد أنه يمكنني أيضًا حساب 867-5309 (هيه*)

هل سيؤدي هذا إلى أي مواقف يمكنك التفكير في ذلك لن تسمح للمستخدم بإدخال رقم هاتفه؟ هل يمكن أن تفكر في أي قواعد أخرى لا ينبغي أن يحتوي عليها رقم الهاتف؟ أي أفكار أخرى؟

هل كانت مفيدة؟

المحلول

يبدو لي أنك تبذل جهداً أكبر من هذا الأمر. انصح:

إذا كان هدفك هو الحماية من أرقام الهواتف الخاطئة ، فيمكنك على الأرجح التقاط أكثر من 90 ٪ منها بفحص بسيط للغاية.

إذا كان هدفك هو محاولة إجبار المستخدمين على تقديم رقم صالح سواء كانوا يريدون إعطاء هذه المعلومات أم لا ، فأنت قد اتخذت مهمة ميؤوس منها- حتى لو تمكنت من الوصول إلى 100 ٪ دقيقة ومحدثة قواعد بيانات Telco الثانية للتحقق من أن الرقم الدقيق الذي تم إدخاله حاليًا يعيش حاليًا ، لا يزال لا تكتسب أي تأكيد بأن الرقم الذي قدموه هو خاص بهم. مرة أخرى ، سيؤدي فحص بسيط إلى إحباط غالبية الأشخاص الذين يدخلون أرقامًا زائفة ، لكن أولئك الذين يرغبون في تجربة أكثر من مرتين أو ثلاث مرات إرادة ابحث عن طريقة لهزيمة محاولاتك لاكتساب أعدادهم.

في كلتا الحالتين ، سيحصل الاختبار البسيط على نتائج جيدة وسيستغرق الدخول في مجموعات القواعد الأكثر تعقيدًا بمزيد من الوقت مع توفير فائدة ضئيلة بشكل متزايد لك (مع إضافة إيجابيات خاطئة أيضًا ، كما هو موضح بالفعل مع "سبعة من نفس الرقم "و 867-5309 الحالات).

نصائح أخرى

يمكنك القيام بالتحقق من صحة رقم الهاتف داخليًا في تطبيقك باستخدام تعبيرات منتظمة. اعتمادًا على لغتك ، يمكنك استدعاء وظيفة ستعود بشكل صحيح إذا كان رقم الهاتف المقدم يطابق التعبير.

في 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

تحرير: بعض المواقع الخاصة باللغة للتعبيرات العادية:

إذا كنت تستطيع التحقق من رمز المنطقة ، إلا إذا كنت حقا حقا بحاجة إلى معرفة رقم هاتفهم ، ربما تفعل ما هو معقول.

Amybe ألق نظرة على الإجابات على هذا السؤال.

867-5309 هو رقم هاتف صالح يتم تعيينه للأشخاص في رموز المنطقة المختلفة.

في Django ، يوجد حزمة مساهمة صغيرة لطيفة تسمى LocalFlavor Wich لديها الكثير من رمز التحقق من صحة البلد ، على سبيل المثال الرموز البريدية أو أرقام الهواتف. يمكنك النظر في المصدر أيضًا لمعرفة كيف يتعامل Django مع هذه البلد الذي ترغب في استخدامه ؛ فمثلا: نما عن التحقق من صحة. يمكن أن يكون هذا لجوء رائع للحصول على معلومات حول البلدان التي تعرفها القليل أيضًا.

لا يزال بإمكان عملاؤك القيام بما أقوم به ، وهو إعطاء رقم MovieFone المحلي.

أيضًا ، 123-1234 أو 123-4567 هي أرقام غير صالحة فقط لأن البادئة تبدأ بـ 1 ، لكن 234-5678 أو 234-1234 ستكون صالحة بالفعل (على الرغم من أنها تبدو مزيفة).

إذا كنت متمسكًا بأرقام الولايات المتحدة وكندا ، أعتقد أن Regex التالي قد تعمل: [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

تحتاج أيضًا إلى مراعاة الاتصال المكون من عشرة أرقام ، والذي يستخدم في بعض المناطق الآن: هذا يختلف عن الاتصال لمسافات طويلة (أي 303-555-1234 ، على عكس 1-303-555-1234). في بعض الأماكن ، يبلغ طول رقم هاتف صالح عشرة أرقام ؛ في حالات أخرى ، هو سبعة.

هذه المعلمات تبدو جيدة بالنسبة لي ، قد أتجنب أيضًا الأرقام التي تبدأ بـ 911 فقط لأكون آمنًا.

في بحثي الذي كان يجب أن أقوم به مسبقًا>. <وجدت أن 7 أرقام متطابقة هي أرقام هواتف صالحة. حتى أتمكن من حساب هذه القاعدة.

هذه وظيفة سريعة أستخدمها (أدناه). لديّ إمكانية الوصول إلى قاعدة بيانات ZipCode التي تحتوي على بيانات AreaCode و Prefix التي يتم تحديثها شهريًا. لقد فكرت في كثير من الأحيان في القيام بتراجع البيانات لتأكيد وجود البادئة لرمز المنطقة.

    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 (رقم كسلسلة) للكيان.

بالنسبة لنا والتحقق من صحة الهاتف الدولي ، وجدت أن هذا الرمز هو الأنسب:

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

يمكنك العثور على مناقشة (وإن كانت مؤرخة إلى حد ما) هنا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top