Подтвердить что ты не робот

Регулярное выражение, которое соответствует шаблону или является пустой строкой

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

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

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

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

^[\w\.\-][email protected]([\w\-]+\.)+[a-zA-Z]+$|\b
4b9b3361

Ответ 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 соответствует границе слова. Я думаю, вы можете использовать ^ $для пустой строки.