如何使用正则表达式检测rupay借记卡

问题描述 投票:0回答:2

Ru支付卡以下面的16位数字开头

  1. 60
  2. 6521
  3. 6522

因此,如何匹配此格式以获取类型,因为它是借记卡的rupay类型

我已经尝试过此正则表达式

/^(((60)([0-9]{14}))|((6521)([0-9]{12}))|((6522)([0-9]{12})))$/
php regex preg-match
2个回答
1
投票

要同时匹配两个范围,可以从第一个样式中排除011,从另一个样式中排除521522

不包括rupay卡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])不在左边assert 521或522
  • (?:非捕获组
    • [011比赛011
    • |
    • [5[0-9][0-9]匹配数字0-9的5和2次
  • )封闭组
  • [[0-9]{12}匹配12位数字
  • $字符串结尾

Regex demo


0
投票

为什么不只是按照老式的方式呢?

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";
}
© www.soinside.com 2019 - 2024. All rights reserved.