Regex предвосхищает логическое «ИЛИ» - чтобы исключить определенные шаблоны - PullRequest
1 голос
/ 12 апреля 2019

Я видел много примеров проверки пароля, которые делают логическое И.Например, пароль должен иметь

  • по крайней мере одну цифру (AND)
  • по крайней мере один символ (AND)
  • длина от 6 до 15

Это можно записать с помощью регулярного выражения «положительный взгляд» как:

var includePattern = @"^(?=.*\d)(?=.*[a-zA-z]).{6,15}$"; 
bool tfMatch = Regex.IsMatch("Password1", includePattern); //
if (tfMatch)
    //continue... valid thus far...

Мой вопрос заключается в том, что я хочу ИСКЛЮЧИТЬ определенные группы или шаблоны, по сути, выполняя логическое «ИЛИ»;Например, допустим, что я хочу сопоставить (чтобы сделать недействительным пароль, если ЛЮБОЙ из следующих условий является истинным):

  • ПО МЕНЬШЕМУ ПРОБЕЛУ НАЙТИ (ИЛИ)
  • хотя бы одиннайдена одинарная кавычка (ИЛИ)
  • найдена хотя бы одна двойная кавычка (ИЛИ)
  • строка "666" номер зверя

Требуется помощь поthe excludePattern .. положительный взгляд?отрицательный взгляд?

var excludePattern = @"^( ...xxx...  $"; //<== **** what goes in here??
bool tfMatch = Regex.IsMatch("Pass 666 word", excludePattern); //
if (tfMatch)
    //DONT continue... contains excluded

Я использую регулярное выражение c #, но любой вкус подойдет для начала.

1 Ответ

0 голосов
/ 12 апреля 2019

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

как минимум один найденный пробел (ИЛИ)

найдена хотя бы одна одинарная кавычка (ИЛИ)

хотя бы одна двойная кавычканайдено (ИЛИ)

строка "666" номер зверя

Можно использовать

^(?!.* |.*'|.*"|.*666)<rest of your pattern>

https://regex101.com/r/u9BoIl/1

...