проблема с preg_match - PullRequest
       15

проблема с preg_match

2 голосов
/ 13 сентября 2011

Я должен подтвердить для кредитной карты Laser.Карта начинается с 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 Ответ

4 голосов
/ 13 сентября 2011
/^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])

Помните, что [] - это КЛАСС. Это значит искать любой из этих символов в скобках. Если вы собираетесь на / или, вам нужно использовать группу ().

Исправлено, это должно выглядеть так: (?:6304|6706|6709|6771)

\ {d} 12,15

Насколько я понимаю, вам нужны числа фиксированной длины, а не переменные. Ваш квантификатор говорит, что это может быть 12, 13, ..., еще 15 чисел. Мы хотим только 12 или 15 больше.

...