Ru支付卡以下面的16位数字开头
因此,如何匹配此格式以获取类型,因为它是借记卡的rupay类型
我已经尝试过此正则表达式
/^(((60)([0-9]{14}))|((6521)([0-9]{12}))|((6522)([0-9]{12})))$/
要同时匹配两个范围,可以从第一个样式中排除011
,从另一个样式中排除521
和522
。
不包括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位数字)
封闭组$
字符串结尾从发现卡中排除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位数字$
字符串结尾为什么不只是按照老式的方式呢?
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";
}