Как сделать регулярное выражение для обнаружения дебетовой карты rupay - PullRequest
0 голосов
/ 21 марта 2020

Ру платежная карта начинается с этих следующих номеров с 16 цифрами

  1. 60
  2. 6521
  3. 6522

Так как совпадать это форматы, чтобы получить тип, поскольку это дебетовая карта типа rupay

Я пробовал с этим регулярным выражением

/^(((60)([0-9]{14}))|((6521)([0-9]{12}))|((6522)([0-9]{12})))$/

Ответы [ 2 ]

2 голосов
/ 21 марта 2020

Почему бы просто не сделать это по старинке?

Substr и if выполнят эту работу просто отлично. И на мой взгляд легче читать.

if(strlen($card) == 16 && 
   (substr($card, 0,2) == "60") ||
   substr($card, 0,4) == "6521") ||
   substr($card, 0,4) == "6522"))){
   echo "it's ru pay card";
}
2 голосов
/ 21 марта 2020

Чтобы соответствовать обоим диапазонам, вы можете исключить 011 из первого шаблона и исключить 521 и 522 из другого шаблона.

Чтобы исключить 011 для карт рупей:

^6(?!011)(?:0[0-9]{14}|52[12][0-9]{12})$

Пояснение

  • ^6 Начало строки и совпадение 6
  • (?!011) Утверждение 011 не прямо вправо
  • (?: Группа без захвата
    • 0[0-9]{14} Соответствует 0 и 14 цифрам
    • | Или
    • 52[12][0-9]{12} Соответствует 521 или 522 и 12 цифрам
  • ) Закрыть группу
  • $ Конец строки

Regex demo

Чтобы исключить 521 и 522 из карт обнаружения

^6(?!52[12])(?:011|5[0-9][0-9])[0-9]{12}$

Пояснение

  • ^6 Начало строки и совпадение 6
  • (?!52[12]) Утверждение 521 или 522 не прямо направо
  • (?: Группа без захвата
    • 011 Совпадение 011
    • | Или
    • 5[0-9][0-9] Матч 5 и 2 раза a di git 0-9
  • ) Закрыть группу
  • [0-9]{12} Совпадение 12 цифр
  • $ Конец строки

Regex demo

...