2015-11-26 3 views
2

Я должен генерировать регулярное выражение для обнаружения шаблонов текста, в которых задействованы номера кредитных карт, у меня есть регулярное выражение, но не получается, когда текст изменяется с помощью простых пробелов между текстом (например, не номер действительной кредитной карты):Регулярное выражение регулярного выражения PCI Compliance с пробелами

4320 7589 9456

регулярное выражение:

4\d{3}(\s+|-)?\d{4}(\s+|-)?\d{4}(\s+|-)?\d{4} 

Это регулярное выражение матч легко, но если кто-то изменить текст с пробелами между любым числом, как это:

4 320 7589 9456

Не соответствует, мне нужно регулярное выражение, чтобы обнаружить любую возможную переменную с пробелами, специальными символами, буквами, некоторые примеры:

43 20 75 89 94 56 01 23 
4 3 2 0 7 5 8 9 9 4 5 6 0 1 2 3 
4320a7589b9456c
4320$7589$9456$
4320_7589_9456_

я не знаю, могу ли я лишить любое пространство, символы из шаблон для анализа текста?

+0

Попробуйте ['^ 4 (?: \ D * \ d) {15} $'] (https://regex101.com/r/eH9qJ0/1) –

+2

'\ s' также будет соответствовать новым строкам. Соответствие PCI? Я немного волнуюсь, когда вижу это ... – HamZa

+0

@стрибижев отлично работает! не соответствует группе, но не имеет значения, потому что шаблон совпадает. – ravasquezgt

ответ

1

Я отправляю сообщение, потому что вы на самом деле попросили помочь с шаблоном, чтобы соответствовать любому количеству цифр, отличных от первых 4, и еще 15 цифр.

Узор

^4(?:\D*\d){15}$ 

См demo

Regex пробой:

  • ^ - начало строки
  • 4 - буквальный 4
  • (?:\D*\d){15} - 15 вхождений последовательностей ...
    • \D* - 0 или более нецифровые символы перед ..
    • \d - цифра
  • $ - конец строки

Если вам нужно сделать захват, вы можете захватить (например, ^4((?:\D*\d){3})((?:\D*\d){4})((?:\D*\d){4})((?:\D*\d){4})$), но субматрицы будут по-прежнему содержать «мусор» между цифрами.

Смежные вопросы