regex شرح - تعبير شامل شامل للتحقق من رقم الهاتف




regular expression (25)

أحاول وضع تعبير شامل شامل للتحقق من صحة أرقام الهواتف. من الناحية المثالية ، يمكنه التعامل مع التنسيقات الدولية ، ولكن يجب عليه التعامل مع التنسيقات الأمريكية ، بما في ذلك ما يلي:

  • 1-234-567-8901
  • 1-234-567-8901 x1234
  • 1-234-567-8901 ext1234
  • 1 (234) 567-8901
  • 1.234.567.8901
  • 1/234/567/8901
  • 12345678901

سأجيب بمحاولتي الحالية ، لكنني أتمنى أن يكون لدى شخص ما شيئًا أفضل و / أو أكثر أناقة.


Answers

لاحظ أن تجريد () الأحرف لا يعمل مع نمط كتابة الأرقام البريطانية الشائعة: +44 (0) 1234 567890 مما يعني الاتصال الهاتفي بالرقم الدولي:
+441234567890
أو في المملكة المتحدة اتصل على 01234567890


إذا كنت تريد فقط التحقق من عدم وجود بيانات عشوائية عشوائية في الحقل (على سبيل المثال ، من مرسلي الرسائل غير المرغوب فيها من النموذج) ، فيجب أن يكون هذا التعبير المعتاد جيدًا:

^[0-9+\(\)#\.\s\/ext-]+$

لاحظ أنه لا يحتوي على أي قواعد خاصة لعدد الأرقام ، أو الأرقام الصحيحة في هذه الأرقام ، فإنه يتحقق فقط من أن الأرقام فقط ، أو الأقواس ، أو الشرط ، أو زائد ، أو المساحة ، أو الجنيه ، أو العلامة النجمية ، أو النقطة ، أو الفاصلة ، أو الحروف e ، x ، t موجودة.

يجب أن تكون متوافقة مع الأرقام الدولية وتنسيقات الترجمة. هل تتوقع أي حاجة للسماح لأقواس مربعة أو مجعدة أو بزاوية لبعض المناطق؟ (حاليا لا يتم تضمينها).

إذا كنت ترغب في الحفاظ على قواعد الرقم (كما هو الحال في رموز المناطق الأمريكية والبادئات (رموز التبادل) يجب أن تقع في نطاق 200-999) ، حسن الحظ لك. الحفاظ على مجموعة قواعد معقدة قد تكون قديمة في أي وقت في المستقبل من قبل أي بلد في العالم لا يبدو ممتعا.

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


هذا هو نمط التعبير العادي البسيط لأرقام الهاتف المحمول الفلبينية:

((\+[0-9]{2})|0)[.\- ]?9[0-9]{2}[.\- ]?[0-9]{3}[.\- ]?[0-9]{4}

أو

((\+63)|0)[.\- ]?9[0-9]{2}[.\- ]?[0-9]{3}[.\- ]?[0-9]{4}

سوف تطابق هذه:

+63.917.123.4567  
+63-917-123-4567  
+63 917 123 4567  
+639171234567  
09171234567  

وسيتطابق الأول مع رمز البلد المكون من رقمين ، بينما سيطابق الرمز الثاني رمز البلد الفلبيني حصريًا.

اختبرها هنا: http://refiddle.com/1ox


أجبت على هذا السؤال على سؤال SO آخر قبل أن تقرر تضمين جوابي كإجابة على هذا الموضوع ، لأنه لم يكن هناك أحد يخاطب كيف يتطلب / لا يتطلب عناصر ، فقط يسلم regexs: Regex يعمل بشكل خاطئ ، يطابق أشياء غير متوقعة

من منشوري على هذا الموقع ، قمت بإنشاء دليل سريع لمساعدة أي شخص يقوم بعمل تعبير منطقي خاص به لتنسيق رقم الهاتف المطلوب الخاص به ، والذي سأحذر منه (كما فعلت على الموقع الآخر) أنه إذا كنت مقيدًا للغاية ، قد لا تحصل على النتائج المطلوبة ، ولا يوجد حل "مقاس واحد يناسب الجميع" لقبول جميع أرقام الهواتف الممكنة في العالم - فقط ما تقرر قبوله كتنسيق من اختيارك. استخدام على مسؤوليتك الخاصة.

ورقة الغش السريع

  • بدء التعبير: /^
  • إذا كنت ترغب في طلب مسافة ، استخدم: [\s] أو \s
  • إذا كنت تريد استخدام قوس ، استخدم: [(] و [)] . استخدام \( و \) قبيح ويمكن أن يجعل الأمور مربكة.
  • إذا كنت تريد أن يكون أي شيء اختياري ، ضع علامة ? بعد ذلك
  • إذا كنت تريد واصلة ، اكتب فقط - أو [-] . إذا لم تضعها أولاً أو الأخيرة في سلسلة من الشخصيات الأخرى ، قد تحتاج إلى الهروب منها: \-
  • إذا كنت ترغب في قبول اختيارات مختلفة في الفتحة ، فضع أقواس حول الخيارات: [-.\s] سوف تتطلب واصلة أو نقطة أو مساحة. علامة استفهام بعد آخر شريحة ستجعل كل تلك الاختيارات لهذه الفتحة.
  • \d{3} : يتطلب رقمًا مكونًا من 3 أرقام: 000-999. اختزال لـ [0-9][0-9][0-9] .
  • [2-9] : يتطلب رقمًا من 2 إلى 9 لهذه الفتحة.
  • (\+|1\s)? : قبول "زائد" أو 1 ومسافة (حرف الأنبوب ، | ، هو "أو") ، وجعلها اختيارية. يجب تجنب علامة "علامة زائد".
  • إذا كنت تريد أن تتطابق أرقام محددة مع إحدى الفتحات ، فأدخلها: [246] ستحتاج إلى 2 أو 4 أو 6. [77|78] سيتطلب 77 أو 78.
  • $/ : قم بإنهاء التعبير

My inclination is to agree that stripping non-digits and just accepting what's there is best. Maybe to ensure at least a couple digits are present, although that does prohibit something like an alphabetic phone number "ASK-JAKE" for example.

A couple simple perl expressions might be:

@f = /(\d+)/g;
tr/0-9//dc;

Use the first one to keep the digit groups together, which may give formatting clues. Use the second one to trivially toss all non-digits.

هل هناك قلق من احتمال وجود توقف مؤقت ثم إدخال المزيد من المفاتيح؟ أو شيء من هذا القبيل 555-1212 (انتظر الصافرة) 123؟


محاولتي في تعبير غير معتاد:

/^[+#*\(\)\[\]]*([0-9][ ext+-pw#*\(\)\[\]]*){6,45}$/

يقبل:

+(01) 123 (456) 789 ext555
123456
*44 123-456-789 [321]
123456
123456789012345678901234567890123456789012345
*****++[](][((( 123456tteexxttppww

ترفض:

mob 07777 777777
1234 567 890 after 5pm
john smith
(empty)
1234567890123456789012345678901234567890123456
911

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


Do a replace on formatting characters, then check the remaining for phone validity. In PHP,

 $replace = array( ' ', '-', '/', '(', ')', ',', '.' ); //etc; as needed
 preg_match( '/1?[0-9]{10}((ext|x)[0-9]{1,4})?/i', str_replace( $replace, '', $phone_num );

Breaking a complex regexp like this can be just as effective, but much more simple.


أعمل في شركة أبحاث السوق وعلينا أن نرشح هذه الأنواع من المدخلات على مدار الوقت. You're complicating it too much. Just strip the non-alphanumeric chars, and see if there's an extension.

For further analysis you can subscribe to one of many providers that will give you access to a database of valid numbers as well as tell you if they're landlines or mobiles, disconnected, etc. It costs money.


You would probably be better off using a Masked Input for this. That way users can ONLY enter numbers and you can format however you see fit. I'm not sure if this is for a web application, but if it is there is a very click jQuery plugin that offers some options for doing this.

http://digitalbush.com/projects/masked-input-plugin/

They even go over how to mask phone number inputs in their tutorial.


.*

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

وأود أيضا أن تنظر في أي مما يلي كإدخالات صالحة على موقع ويب:

"123 456 7890 until 6pm, then 098 765 4321"  
"123 456 7890 or try my mobile on 098 765 4321"  
"ex-directory - mind your own business"

أعتقد أن Number::Phone::US و Regexp::Common (خصوصًا مصدر Regexp::Common::URI::RFC2806 ) يمكن أن تساعد وحدات Perl.

ربما ينبغي تحديد السؤال بتفاصيل أكثر بقليل لشرح الغرض من التحقق من صحة الأرقام. على سبيل المثال ، 911 هو رقم صالح في الولايات المتحدة ، ولكن 911x ليس لأي قيمة x. وذلك حتى تتمكن شركة الهاتف من حساب وقت الانتهاء من الاتصال. هناك العديد من الاختلافات حول هذه القضية. لكن تعبيرك المعتاد لا يتحقق من جزء رمز المنطقة ، لذا لا يبدو هذا مصدر قلق.

مثل التحقق من صحة عناوين البريد الإلكتروني ، حتى إذا كان لديك نتيجة صحيحة لا يمكنك معرفة ما إذا تم تعيينها لشخص ما حتى تجربتها.

إذا كنت تحاول التحقق من صحة إدخال المستخدم ، فلماذا لا تطبع النتيجة ويتم القيام بها؟ إذا وضع المستخدم رقمًا لا يمكنك التعرف عليه كرقم صالح ، فقم بحفظه على هيئة إدخال أو قطع الأحرف غير المتوفرة. يمكن أن تكون وحدة Number::Phone::Normalize Perl مصدرًا للإلهام.


I found this to be something interesting. I have not tested it but it looks as if it would work

<?php
/*
string validate_telephone_number (string $number, array $formats)
*/

function validate_telephone_number($number, $formats)
{
$format = trim(ereg_replace("[0-9]", "#", $number));

return (in_array($format, $formats)) ? true : false;
}

/* Usage Examples */

// List of possible formats: You can add new formats or modify the existing ones

$formats = array('###-###-####', '####-###-###',
                 '(###) ###-###', '####-####-####',
                 '##-###-####-####', '####-####', '###-###-###',
                 '#####-###-###', '##########');

$number = '08008-555-555';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}

echo "<br />";

$number = '123-555-555';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}

echo "<br />";

$number = '1800-1234-5678';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}

echo "<br />";

$number = '(800) 555-123';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}

echo "<br />";

$number = '1234567890';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}
?>

أود أيضًا اقتراح libphonenumber مكتبة Google " libphonenumber ". وأنا أعلم أنه ليس regex لكنه يفعل بالضبط ما تريد.

على سبيل المثال ، سيتعرف على ما يلي:

15555555555

هو رقم محتمل ولكن ليس رقمًا صالحًا. كما يدعم البلدان خارج الولايات المتحدة.

يسلط الضوء على وظائف:

  • تحليل / تنسيق / التحقق من صحة أرقام الهواتف لجميع البلدان / مناطق العالم.
  • getNumberType - يحصل على نوع الرقم استنادًا إلى الرقم نفسه ؛ قادرة على التمييز بين الخطوط الثابتة ، والهاتف المحمول ، والرقم المجاني ، ومعدل الاشتراك الممتاز ، والتكلفة المشتركة ، وخاصية نقل الصوت عبر بروتوكول الإنترنت (VoIP) والأرقام الشخصية (كلما أمكن).
  • isNumberMatch - يحصل على مستوى الثقة حول ما إذا كان يمكن أن يكون isNumberMatch .
  • getExampleNumber / getExampleNumberByType - يوفر أرقام أمثلة صالحة لجميع البلدان / المناطق ، مع خيار تحديد نوع رقم هاتف المثال المطلوب.
  • isPossibleNumber - تخمين بسرعة ما إذا كان الرقم هو phonenumber ممكن باستخدام معلومات الطول فقط ، أسرع بكثير من التحقق الكامل.
  • isValidNumber - التحقق الكامل من رقم هاتف لمنطقة تستخدم معلومات طول وبادئة.
  • AsYouTypeFormatter - تنسيقات أرقام الهاتف على ذبابة عندما يدخل المستخدمون كل رقم.
  • findNumbers - findNumbers الأرقام في إدخال النص.
  • PhoneNumberOfflineGeocoder - يوفر معلومات جغرافية ذات صلة برقم هاتف.

أمثلة

أكبر مشكلة في التحقق من رقم الهاتف هو أنها تعتمد ثقافيا جدا.

  • أمريكا
    • (408) 974–2042 عبارة عن رقم أمريكي صالح
    • (999) 974–2042 ليس رقمًا صالحًا بالولايات المتحدة
  • أستراليا
    • 0404 999 999 هو رقم أسترالي صالح
    • (02) 9999 9999 هو أيضًا رقم أسترالي صالح
    • (09) 9999 9999 ليس رقمًا أستراليًا صالحًا

يُعد التعبير العادي أمرًا جيدًا للتحقق من تنسيق رقم الهاتف ، ولكنه لن يكون قادرًا حقًا على التحقق من صلاحية رقم الهاتف.

أقترح تخطي تعبير عادي بسيط لاختبار رقم هاتفك libphonenumber بمكتبة مثل libphonenumber Google.

تقديم libphonenumber!

باستخدام أحد الأمثلة الأكثر تعقيدًا 1-234-567-8901 x1234 ، 1-234-567-8901 x1234 ، تحصل على البيانات التالية من libphonenumber (رابط إلى العرض التوضيحي عبر الإنترنت) :

Validation Results

Result from isPossibleNumber()  true
Result from isValidNumber()     true

Formatting Results:

E164 format                    +12345678901
Original format                (234) 567-8901 ext. 123
National format                (234) 567-8901 ext. 123
International format           +1 234-567-8901 ext. 123
Out-of-country format from US  1 (234) 567-8901 ext. 123
Out-of-country format from CH  00 1 234-567-8901 ext. 123

لذلك ، لا تتعلّم فقط ما إذا كان رقم الهاتف صالحًا (وهو كذلك) ، ولكنك تحصل أيضًا على تنسيق ثابت لرقم الهاتف في لغتك.

كمكافأة ، يحتوي libphonenumber على عدد من مجموعات البيانات للتحقق من صحة أرقام الهاتف ، كذلك ، فإن التحقق من رقم مثل +61299999999 (الإصدار الدولي من (02) 9999 9999 ) يعود كرقم صحيح بالتنسيق:

Validation Results

Result from isPossibleNumber()  true
Result from isValidNumber()     true

Formatting Results

E164 format                    +61299999999
Original format                61 2 9999 9999
National format                (02) 9999 9999
International format           +61 2 9999 9999
Out-of-country format from US  011 61 2 9999 9999
Out-of-country format from CH  00 61 2 9999 9999

يمنحك libphonenumber أيضًا العديد من المزايا الإضافية ، مثل الاستيلاء على الموقع الذي تم اكتشاف رقم الهاتف به ، وكذلك الحصول على معلومات المنطقة الزمنية من رقم الهاتف:

PhoneNumberOfflineGeocoder Results
Location        Australia

PhoneNumberToTimeZonesMapper Results
Time zone(s)    [Australia/Sydney]

لكن رقم الهاتف الأسترالي غير الصالح ( (09) 9999 9999 ) يرجع أنه ليس رقم هاتف صالحًا.

Validation Results

Result from isPossibleNumber()  true
Result from isValidNumber()     false

يحتوي إصدار Google على شفرات جافا وجافا سكريبت ، لكن الأشخاص نفذوا أيضًا مكتبات للغات أخرى تستخدم مجموعة بيانات رقم هاتف Google i18n:

ما لم تكن متأكدًا من أنك ستقبل دائمًا الأرقام من إحدى اللغات ، وستكون دائمًا بصيغة واحدة ، سأقترح بشدة عدم كتابة الرمز الخاص بك لهذا ، واستخدام libphonenumber للتحقق من صحة أرقام الهواتف وعرضها.


خيار أفضل ... فقط قم بتجريد كل الحروف غير الموجودة على المدخلات (باستثناء "x" وعلامات "+" الرائدة) ، مع الحرص بسبب الاتجاه البريطاني لكتابة الأرقام في النموذج غير القياسي +44 (0) ... عندما يطلب منك استخدام البادئة الدولية (في هذه الحالة المحددة ، يجب عليك تجاهل (0) بالكامل).

ثم ينتهي بك الأمر بقيم مثل:

 12345678901
 12345678901x1234
 345678901x1234
 12344678901
 12345678901
 12345678901
 12345678901
 +4112345678
 +441234567890

ثم عند عرض ، قم بإعادة تنسيق محتوى قلوبك. على سبيل المثال

  1 (234) 567-8901
  1 (234) 567-8901 x1234

مثال عامل لتركيا ، مجرد تغيير

d{9}

وفقا لاحتياجاتك والبدء في استخدامه.

function validateMobile($phone)
{
    $pattern = "/^(05)\d{9}$/";
    if (!preg_match($pattern, $phone))
    {
        return false;
    }
    return true;
}

$phone = "0532486061";

if(!validateMobile($phone))
{
    echo 'Incorrect Mobile Number!';
}

$phone = "05324860614";
if(validateMobile($phone))
{
    echo 'Correct Mobile Number!';
}

ها هي أفضل محاولة حتى الآن. يتعامل مع التنسيقات أعلاه ولكنني متأكد من أني فقدت بعض التنسيقات الأخرى الممكنة.

^\d?(?:(?:[\+]?(?:[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?:[\d]{3})[\-/)]?(?:[ ]+)?)?(?:[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?:[\d]{1,5}))?$

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

1?\W*([2-9][0-8][0-9])\W*([2-9][0-9]{2})\W*([0-9]{4})(\se?x?t?(\d*))?

وهنا برنامج بيرل لاختباره. عند المطابقة ، يحتوي $ 1 على رمز المنطقة ، ويحتوي $ 2 و $ 3 على رقم الهاتف ، ويحتوي $ 5 على الامتداد. يقوم برنامجي الاختباري بتنزيل ملف من الإنترنت وطباعة جميع أرقام الهاتف فيه.

#!/usr/bin/perl

my $us_phone_regex =
        '1?\W*([2-9][0-8][0-9])\W*([2-9][0-9]{2})\W*([0-9]{4})(\se?x?t?(\d*))?';


my @tests =
(
"1-234-567-8901",
"1-234-567-8901 x1234",
"1-234-567-8901 ext1234",
"1 (234) 567-8901",
"1.234.567.8901",
"1/234/567/8901",
"12345678901",
"not a phone number"
);

foreach my $num (@tests)
{
        if( $num =~ m/$us_phone_regex/ )
        {
                print "match [$1-$2-$3]\n" if not defined $4;
                print "match [$1-$2-$3 $5]\n" if defined $4;
        }
        else
        {
                print "no match [$num]\n";
        }
}

#
# Extract all phone numbers from an arbitrary file.
#
my $external_filename =
        'http://web.textfiles.com/ezines/PHREAKSANDGEEKS/PnG-spring05.txt';
my @external_file = `curl $external_filename`;
foreach my $line (@external_file)
{
        if( $line =~ m/$us_phone_regex/ )
        {
                print "match $1 $2 $3\n";
        }
}

تصحيح:

يمكنك تغيير \ W * إلى \ s * \ W؟ \ s * في regex لإحكامه قليلاً. لم أكن أفكر في التعبير العادي من حيث ، على سبيل المثال ، التحقق من صحة إدخالات المستخدم في نموذج ما عند كتابته ، ولكن هذا التغيير يجعل من الممكن استخدام التعبير المعتاد لهذا الغرض.

'1?\s*\W?\s*([2-9][0-8][0-9])\s*\W?\s*([2-9][0-9]{2})\s*\W?\s*([0-9]{4})(\se?x?t?(\d*))?';

Here's one that works well in JavaScript. It's in a string because that's what the Dojo widget was expecting.

It matches a 10 digit North America NANP number with optional extension. Spaces, dashes and periods are accepted delimiters.

"^(\\(?\\d\\d\\d\\)?)( |-|\\.)?\\d\\d\\d( |-|\\.)?\\d{4,4}(( |-|\\.)?[ext\\.]+ ?\\d+)?$"

إن مشاعري المعززة يعززها مقدار الردود على هذا الموضوع - وهو أن هناك عددًا لا نهائيًا من الحلول لهذه المشكلة ، لن يكون أي منها أنيقًا.

بصراحة ، أنصحك بعدم محاولة التحقق من صحة أرقام الهواتف. حتى لو كان بإمكانك كتابة مدقق شعر كبير يسمح باستخدام جميع الأشكال المشروعة المختلفة ، فسينتهي الأمر في النهاية إلى جعل أي شيء يشبه إلى حد بعيد رقم الهاتف في المقام الأول.

في رأيي ، فإن الحل الأكثر أناقة هو التحقق من طول الحد الأدنى ، لا شيء أكثر من ذلك.


هل تلقيت نظرة على RegExLib ؟

إدخال رقم الهاتف في الولايات المتحدة أعاد إلى حد كبير قائمة من الاحتمالات.


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

سيستخدم الشكل المعتاد التالي عددًا كبيرًا من مجموعات الأحرف وعدد الأحرف في مجموعة متنوعة من تنسيقات أرقام الهواتف العالمية:

/^\s*(?:\+?(\d{1,3}))?([-. (]*(\d{3})[-. )]*)?((\d{3})[-. ]*(\d{2,4})(?:[-.x ]*(\d+))?)\s*$/gm

إيجابي:
+42 555.123.4567
+ 1- (800) -123-4567
+7 555 1234567
+7 (926) 1234567
(926) 1234567
+79261234567
926 1234567
9261234567
1234567
123-4567
123-89-01
495 1234567
469 123 45 67
89261234567
8 (926) 1234567
926.123.4567
415-555-1234
650-555-2345
(416)555-3456
202 555 4567
4035555678
1 416 555 9292

نفي:
926 3 4
8 800 600-APPLE

المصدر الأصلي: http://www.regexr.com/38pvb


ستواجه صعوبة في التعامل مع الأرقام الدولية باستخدام تعبير واحد / بسيط ، راجع هذا المنشور حول الصعوبات التي تواجهها أرقام الهواتف الدولية (وحتى الأمريكية الشمالية).

ستحتاج إلى تحليل الأرقام القليلة الأولى لتحديد رمز البلد ، ثم التصرف بشكل مختلف استنادًا إلى البلد.

أبعد من ذلك - القائمة التي قدمتها لا تتضمن تنسيقًا أمريكيًا شائعًا آخر - ترك الإصدار الأول. معظم الهواتف المحمولة في الولايات المتحدة لا تتطلب ذلك ، وستبدأ في حير جيل الشباب ما لم يتصلوا دوليًا.

لقد حددت بشكل صحيح أنها مشكلة صعبة ...

-Adam


I was struggling with the same issue, trying to make my application future proof, but these guys got me going in the right direction. I'm not actually checking the number itself to see if it works or not, I'm just trying to make sure that a series of numbers was entered that may or may not have an extension.

Worst case scenario if the user had to pull an unformatted number from the XML file, they would still just type the numbers into the phone's numberpad 012345678x5 , no real reason to keep it pretty. That kind of RegEx would come out something like this for me:

\d+ ?\w{0,9} ?\d+
  • 01234467 extension 123456
  • 01234567x123456
  • 01234567890

لقد وجدت هذا للعمل بشكل جيد:

^\(*\+*[1-9]{0,3}\)*-*[1-9]{0,3}[-. /]*\(*[2-9]\d{2}\)*[-. /]*\d{3}[-. /]*\d{4} *e*x*t*\.* *\d{0,4}$

يعمل لتنسيقات الأرقام هذه:

1-234-567-8901
1-234-567-8901 x1234
1-234-567-8901 ext1234
1 (234) 567-8901
1.234.567.8901
1/234/567/8901
12345678901
1-234-567-8901 ext. 1234
(+351) 282 433 5050

تأكد من استخدام العلامات العالمية والمتعددة الأنماط للتأكد من ذلك.

الرابط: http://www.regexr.com/3bp4b


نظرة سريعة على شفرة المصدر لـ Pattern.java تكشف عن أن '*' و '+' يتم تنفيذها كمثال على Curly (وهو الكائن الذي تم إنشاؤه للمشغلين المجعد). وبالتالي،

a*

يتم تنفيذه

a{0,0x7FFFFFFF}

و

a+

يتم تنفيذه

a{1,0x7FFFFFFF}

هذا هو السبب في أنك ترى بالضبط نفس السلوكيات للكريستال والنجوم.





regex validation phone-number