我必须验证激光信用卡。该卡以6304,6706,6709,6771开头,长度为16或19位。我有一个preg_match,我传递的卡号从6706开始,有19位,但是返回false。
// Laser (Laser) P: 6304, 6706, 6709, 6771 L: 16,19
} elseif (preg_match('/^(?:[6304|6706|6709|6771])\d{12,15}$/', $number)) {
$type = 'laser';
答案 0 :(得分:4)
/^6(?:304|706|709|771)(?:\d{12}|\d{15})$/
细分:
/^ # start of line
6(?:304|706|709|771) # your 6xxx codes
(?:\d{12}|\d{15}) # 12 (16-4) or 15 (19-4) more numbers
$/ # end of pattern
指出你所犯的错误:
(?:[6304 | 6706 | 6709 | 6771])
请记住[]
是CLASS。这意味着要在括号内查找任何这些字符。如果您要使用/或,则需要使用组()
。
修正了它应该是:(?:6304|6706|6709|6771)
\ d {12,15}
我的理解是你需要固定长度的数字,而不是变数。你的量词说它可以是12,13,......,还有15个数字。我们只需要12 OR 15。