Регулярное выражение RegEx без специальных символов и по крайней мере одна буква - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь создать регулярное выражение, которое не допускает никаких специальных символов, но также требует прохождения хотя бы одной буквы (алфавита). Алфавит может быть прописным или строчным.

Пример обязательных пропусков и неудач

  • Hello World - PASS
  • HELLO WoRLD - PASS
  • HELLOWORLD ! - FAIL
  • HELLO123 World - PASS
  • 12345 - FAIL

Я также хотел бы разрешить символы - и _.

Это то, что я создал до сих пор: ^(?=.*[A-Z]).{3,25}$

Приведенный выше RegEx проверяет, существует ли алфавит в выражении, но я также хотел бы запретить специальные символы.

Может кто-нибудь объяснить, как я могу добавить дополнительную проверку в том же регулярном выражении?

Ответы [ 2 ]

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

Если вы не хотите 'разрешать - или пробелы в начале или в конце, вы можете использовать 2 прогнозных утверждения, 1 для количества символов и другое для утверждения символа AZ.

^(?=[^A-Z]*[A-Z])(?=.{3,25}$)\w+(?:[\h-]\w+)*$

Пояснение

  • ^ Начало строки
  • (?=[^A-Z]*[A-Z]) Утверждение заглавной буквы AZ
  • (?=.{3,25}$) Утвердить 3 - 25 символов
  • \w+ Соответствовать 1+ словам символов
  • (?:[\h-]\w+)* Повторить 0+ раз, сопоставляя либо горизонтальный символ пробела, либо -
  • $ Конец строки

Regex demo

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

Измените . на ваш список разрешенных символов. Что-то вроде:

^(?=.*?[A-Z])[\w\h-]{3,25}$

https://regex101.com/r/j4wuUP/2/

[\w\h-]

(\w) допускает a-zA-Z0-9_, (\h) горизонтальный пробел и - s. - должен быть первым, последним или экранированным; в противном случае он создаст диапазон символов ascii. В не-PCRE ароматах экранирование невозможно, поэтому оно должно быть первым или последним.

...