Regex и игнорировать пробелы - PullRequest
1 голос
/ 26 апреля 2011

У меня есть следующее регулярное выражение, которое я использую для сопоставления с различными номерами кредитных карт в строке поиска файлов. Однако если до или после сопоставления есть пробел, сопоставление завершится неудачей.

$CC_Regex = "^(\d{4}-){3}\d{4}$|^(\d{4} ){3}\d{4}$|^\d{16}$"

Например, он будет соответствовать первым трем, но не будет соответствовать трем нижним.

1111-2323-2312-3434
1234343425262837
1111 2323 2312 3434

1111-2323-2312-3434 
 1234343425262837
 1111 2323 2312 3434 

Из трех нижних, первый имеет пробел в конце, второй - перед ним, а третий - до и после него.

Заранее спасибо за помощь.

Ответы [ 4 ]

9 голосов
/ 26 апреля 2011

Было бы достаточно легко добавить регулярное выражение для обработки пробелов в начале и в конце:

^\s*(?:(\d{4}-){3}\d{4}|(\d{4} ){3}\d{4}|\d{16})\s*$

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

$result = $subject -creplace '[^0-9]+', ''
$found = $result -cmatch '^[0-9]{16}$'

В конце концов, кто знает, какие идеи могут быть у людей при форматировании - несколько пробелов между группами, смеси пробелов и тире и т. Д ...

1 голос
/ 26 апреля 2011
$CC_Regex = "^\s*(\d{4}-){3}\d{4}\s*$|^\s*(\d{4} ){3}\d{4}\s*$|^\s*\d{16}\s*$"

сделает это совпадением, даже если присутствует начальный или конечный пробел (\s означает любой символ пробела).

1 голос
/ 26 апреля 2011

Я не знаю, как конкретно это сделать в PowerShell, но было бы намного проще использовать какую-то функцию replace (), чтобы избавиться от пробелов (или эквивалента в PowerShell).

replace(' ', '');

РЕДАКТИРОВАТЬ: На самом деле, было бы более разумно удалить все , что не является цифрой в первую очередь.Вы можете сделать это с RegEx легко:

[^0-9]+
0 голосов
/ 26 апреля 2011
$CC_Regex = "(?:\d{4}[- ]?){3}\d{4}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...