RegEx: Как применить ограничение набора символов ко всему выражению - PullRequest
0 голосов
/ 17 июня 2019

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

/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

Теперь, допустим, я также хочу убедиться, что следующий набор символов применим и ко всей строке:

[\x00-\x7F]

Как бы я применил это ограничение 2-го набора символов ко всему шаблону.

Результат будет таким:

  • jake.howlett@howlett.house (проходит)
  • jake.howẟlett@howlett.house (не удается, поскольку the находится за пределами 2-го набора символов)

1 Ответ

2 голосов
/ 17 июня 2019

Вы можете добавить его в положительном виде после проверки начала строки:

^(?=[\x00-\x7F]+$)your_pattern_here
 ^^^^^^^^^^^^^^^^^

После проверки начала позиции строки с помощью ^, (?=[\x00-\x7F]+$) будет выполнен один раз и потребуетвся строка должна состоять только из символов ASCII (примечание + соответствует 1 или более вхождениям, а $ проверяет конец позиции строки).

Регулярное выражение будет выглядеть как

^(?=[\x00-\x7F]+$)(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$

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

...