regex - يوجد - ماهي بطاقة الائتمان




Regex رقم بطاقة الائتمان الاختبارات (6)

Regex لشبكة رائدة للبطاقات

Master Card (2-Bin، 5-Bin both): "(؟: 5 [1-5] [0-9] {2} | 222 [1-9] | 22 [3-9] [0-9] | 2 [3-6] [0-9] {2} | 27 [01] [0-9] | 2720) [0-9] {12} "

Visa : "^ 4 [0-9] {6،} $"

نادي المتعشي : "(^ 30 [0-5] [0-9] {11} $) | (^ (36 | 38) [0-9] {12} $)"

American Express : "^ [34 | 37] [0-9] {14} $"

JCB : "(^ 3 [0-9] {15} $) | (^ (2131 | 1800) [0-9] {11} $)"

Discover : "^ 6011 -؟ \ d {4} -؟ \ d {4} -؟ \ d {4} $"

أختبر تطبيقًا واحدًا يتطابق فيه نمط Regex مع بطاقة الائتمان ، ومن ثم يجب إبراز هذه الأرقام. أنا أستخدم الموقع http://regexpal.com/ لإنشاء أرقام بطاقة ائتمان ائتمان اختبارية للاختبار. اشتراكي هو الحصول على أرقام بطاقات ائتمان صالحة والتي يمكن أن تحتوي على "-" و / أو "،" فيما بينها. لم أكن ناجحًا لإنشاء رقم كهذا عند اختباره باستخدام الموقع

http://regexpal.com/ .

أحتاج عدد قليل من أرقام الائتمان مع سيناريوهات أدناه

  1. رقم بطاقة ائتمان صالح يمكن أن يكون "-" بين أي رقم.
  2. رقم بطاقة ائتمان صالح يمكن أن يكون "،" بين أي رقم.
  3. رقم بطاقة ائتمان ساري المفعول يمكن أن يحتوي على فواصل "أو" أو "-" بين أي رقم.

Regx لبطاقة Rupay:

(508 [5-9] [0-9] {12}) | (6069 [8-9] [0-9] {11}) | (607 [0-8] [0-9] {12}) | (6079 [0-8] [0-9] {11}) | (608 [0-5] [0-9] {12}) | (6521 [5-9] [0-9] {11} ) | (652 [2-9] [0-9] {12}) | (6530 [0-9] {12}) | (6531 [0-4] [0-9] {11})

باستخدام سلسلة بن: 508500 - 508999 ، 606985 - 606999 ، 607000 - 607899 ، 607900 - 607984 ، 608001 - 608500 ، 652150 --- 652199 ، 652200 --- 652999 ، 653000 --- 653099 ، 653100 --- 653149 ،


بالإضافة إلى كل ما سبق ، ستجد هنا تعبيرًا لماستركارد الجديدة (BINs 2221-2720):

^5[1-5][0-9]{0,14}|^(222[1-9]|2[3-6]\\d{2}|27[0-1]\\d|2720)[0-9]{0,12}

لاحظ أن هذا التعبير العادي سيتطابق إذا بدأ المستخدم في إدخال أرقام بطاقة الكتابة ، التي تتوافق مع بطاقة MasterCard. على سبيل المثال ، إذا كان المستخدم يكتب "222185" ، فسيتطابق التعبير العادي ، لأنه لا يوجد نوع آخر من البطاقات يبدأ بـ "2221". قد يكون هذا التعبير العادي مفيدًا إذا كنت تريد عرض نوع البطاقة أثناء كتابة الأرقام الأولى من البطاقة.

بدلاً من ذلك ، إذا كنت تريد مطابقة "post factum" ، فيمكنك تغيير الجزء الأخير من {0,14} و {0,12} إلى {14} و {12} :

^5[1-5][0-9]{14}|^(222[1-9]|2[3-6]\\d{2}|27[0-1]\\d|2720)[0-9]{12}

تؤكد البيانات الأولى على 15 رقمًا لأميكس و 16 رقمًا للتأشيرة و mc و discover و diners و jcb ، لذلك أرسل رقم البطاقة إليهم فقط إذا كان الرقم 15 أو 16 رقمًا باستخدام هذا:

^[0-9]{15}(?:[0-9]{1})?$

توصلت إلى تعبير عادي يسمح بالشرط والمسافات. اختبرها هنا: https://regex101.com/r/Rx2iWD/1

للسماح بالفواصل (التي أعتقد أنها غير معتادة) ، أضفها فقط إلى تعريف sep .

في PHP:

$ccPatt = '/
    (?(DEFINE)
        (?<sep> [ -]?)
    )
    (?<!\d)(?:
      \d{4} (?&sep) \d{4} (?&sep) \d{4} (?&sep) \d{4}               # 16 digits
    | \d{3} (?&sep) \d{3} (?&sep) \d{3} (?&sep) \d (?&sep) \d{3}    # 13 digits
    | \d{4} (?&sep) \d{6} (?&sep) \d{4}                             # 14 digits
    | \d{4} (?&sep) \d{6} (?&sep) \d{5}                             # 15 digit card
    )(?!\d)
/xu';

قم بإزالة الكل , و- وغير الأرقام الأخرى من السلسلة أولاً.

ثم استخدم هذا التعبير العادي الذي يتطابق مع بطاقات Visa و MasterCard و American Express و Diners Club و Discover و JCB:

^(?:4[0-9]{12}(?:[0-9]{3})?|[25][1-7][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$







regex-greedy