Regex - мне нужно включить не алфавит c символ - PullRequest
0 голосов
/ 11 марта 2020

У меня есть это выражение, и мне нужно убедиться, что в нем есть хотя бы один не алфавит c символ

^(?!.*(.)\1)\S{8,12}$
  • testhis недействительно
  • testhis7 действительно
  • testhis @ действует

Ответы [ 3 ]

2 голосов
/ 11 марта 2020

Вы можете использовать положительный прогноз, утверждающий как минимум 1 символ, отличающийся от a-zA-Z

^(?!.*(.)\1)(?=.*[^\sa-zA-Z])\S{8,12}$

Пояснение

  • ^ Start строки
  • (?!.*(.)\1) Не указывать 2 последовательных символа
  • (?=.*[^\sa-zA-Z]) Указывать 1 символ, кроме символа пробела и a-zA-Z
  • \S{8,12} Матч 8 -12 без пробелов
  • $ Конец строки

Regex demo

Другой вариант - использовать \P{L} для подтверждения любой символ, отличный от любого письма на любом языке

^(?!.*(.)\1)(?=.*\P{L})\S{8,12}$

Regex demo

0 голосов
/ 11 марта 2020

Вы можете просто проверить наличие специального символа (соответствует [\p{P}\p{S}]) в положительном прогнозе (?=.*[\p{P}\p{S}]), что дает вам регулярное выражение:

^(?!.*(.)\1)(?=.*[\p{P}\p{S}])\S{8,12}$

См. Демонстрацию в Интернете

Вы также можете заменить [\p{P}\p{S}] на [!"\#$%&'()*+,\-./:;<=>?@\[\\\]^_‘{|}~] или любой другой набор символов, в котором перечислены все символы, которые вы хотите считать «специальными символами».

0 голосов
/ 11 марта 2020

Лучше делать это с отдельными операторами if. Таким образом, вы получите точную информацию о том, что отсутствует в значении. С помощью регулярных выражений вы получите истинный / ложный результат только в том случае, если значение соответствует шаблону или нет - у вас не будет информации ЧТО отсутствует в значении.

Например:

if(!value.Any(c => !char.IsLetter(c)){
    throw new Exception("value must contain at least one non-letter")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...