Регулярное выражение, которое соответствует шаблону или является пустой строкой
У меня есть следующее регулярное выражение, которое соответствует формату адреса электронной почты:
^[\w\.\-][email protected]([\w\-]+\.)+[a-zA-Z]+$
Это используется для проверки с помощью формы с использованием JavaScript. Однако это необязательное поле. Поэтому как изменить это регулярное выражение в соответствии с форматом адреса электронной почты или пустой строкой?
Из моего ограниченного знания регулярных выражений, я думаю, что \b
соответствует пустой строке, а |
означает "Или", поэтому я попытался сделать следующее, но это не сработало:
^[\w\.\-][email protected]([\w\-]+\.)+[a-zA-Z]+$|\b
Ответы
Ответ 1
Чтобы соответствовать pattern
или пустой строке, используйте
^$|pattern
Объяснение
-
^
и $
- это начало и конец строковых якорей соответственно.
-
|
используется для обозначения альтернатив, например. this|that
.
Ссылки
Вкл \b
\b
в большинстве вкусов является якорем "границы слова". Это совпадение с нулевой шириной, то есть пустая строка, но она соответствует только этим строкам в очень определенных местах, а именно в границах слова.
То есть \b
находится:
- Между последовательными
\w
и \w
(любой порядок):
- то есть. между символом слова и символом не-слова
- Между
^
и \w
- то есть. в начале строки, если она начинается с
\w
- Между
\w
и $
- то есть. в конце строки, если она заканчивается на
\w
Ссылки
При использовании регулярного выражения для соответствия адресам электронной почты
Это не тривиально в зависимости от спецификации.
Связанные вопросы
Ответ 2
Альтернативой было бы разместить ваше регулярное выражение в не захватывающих круглых скобках. Затем сделайте это выражение необязательным, используя квалификатор ?
, который будет искать 0 (т.е. Пустую строку) или 1 экземпляр незахваченной группы.
Например:
/(?: some regexp )?/
В вашем случае регулярное выражение будет выглядеть примерно так:
/^(?:[\w\.\-][email protected]([\w\-]+\.)+[a-zA-Z]+)?$/
Нет |
"или" необходим оператор!
Здесь - это документация Mozilla для синтаксиса регулярного выражения JavaScript.
Ответ 3
Я не уверен, почему вы хотите проверить дополнительный адрес электронной почты, но я предлагаю вам использовать
^$|^[^@\s][email protected][^@\s]+$`
значение
^$ empty string
| or
^ beginning of string
[^@\s]+ any character but @ or whitespace
@
[^@\s]+
$ end of string
В любом случае вы не остановите поддельные письма, и таким образом вы не прекратите действительные адреса.
Ответ 4
\ b соответствует границе слова. Я думаю, вы можете использовать ^ $для пустой строки.