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

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

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

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

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

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b
68
задан T Zengerink 27 July 2012 в 09:55
поделиться

3 ответа

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

^$|pattern

Объяснение

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

Ссылки


В \ b

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

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

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

Ссылки


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

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

Связанные вопросы

165
ответ дан 24 November 2019 в 14:07
поделиться

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

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

, что означает

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

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

3
ответ дан 24 November 2019 в 14:07
поделиться

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

0
ответ дан 24 November 2019 в 14:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: