Регулярное выражение, которое соответствует шаблону или является пустой строкой - PullRequest
59 голосов
/ 26 июля 2010

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

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$

Используется для проверки формы с использованием JavaScript.Однако это необязательное поле.Следовательно, как я могу изменить это регулярное выражение в соответствии с форматом адреса электронной почты или пустой строкой?

Из моих ограниченных знаний регулярных выражений я думаю, что \b соответствует пустой строке, а | означает "или",поэтому я попытался сделать следующее, но это не сработало:

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b

Ответы [ 4 ]

150 голосов
/ 26 июля 2010

Чтобы соответствовать pattern или пустой строке, используйте

^$|pattern

Объяснение

  • ^ и $ - начало и конец якоря строки соответственно.
  • | используется для обозначения заместителей, например, this|that.

Ссылки


Вкл. \b

\b в большинстве случаев это якорь "границы слова". Это совпадение с нулевой шириной, то есть пустая строка, но оно совпадает только с этими строками в очень специфических местах , а именно на границах слова.

То есть \b находится:

  • Между последовательными \w и \W (в любом порядке):
    • т.е. между символом слова и символом без слова
  • Между ^ и \w
    • т.е. в начале строки, если она начинается с \w
  • Между \w и $
    • т.е. в конце строки, если она заканчивается \w

Ссылки


Об использовании регулярных выражений для сопоставления адресов электронной почты

Это не тривиально в зависимости от спецификации.

Смежные вопросы

8 голосов
/ 24 апреля 2014

Альтернативой может быть размещение регулярного выражения в скобках без захвата.Затем сделайте это выражение необязательным, используя квалификатор ?, который будет искать 0 (т. Е. Пустую строку) или 1 экземпляр не захваченной группы.

Например:

/(?: some regexp )?/

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

/^(?:[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+)?$/

Нет | "или" необходим оператор!

Здесь - это документация Mozilla для JavaScriptСинтаксис регулярного выражения.

2 голосов
/ 26 июля 2010

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

^$|^[^@\s]+@[^@\s]+$

смысл

^$        empty string
|         or
^         beginning of string
[^@\s]+   any character but @ or whitespace
@         
[^@\s]+
$         end of string

Вы все равно не остановите поддельные электронные письма, и таким образом вы не остановите действительные адреса.

0 голосов
/ 26 июля 2010

\ b соответствует границе слова.Я думаю, что вы можете использовать ^ $ для пустой строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...