preg_match的问题

时间:2011-09-13 18:06:24

标签: php cakephp preg-match

我必须验证激光信用卡。该卡以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';

1 个答案:

答案 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。