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

128

Я нашел много проверок электронной почты Regex в SO, но я не нашел ни одного, который принимает пустую строку. Возможно ли это только через Regex? Принимать только пустую строку или только электронную почту? Я хочу, чтобы это было только на Regex.

ограбить васинал
источник

Ответы:

313

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

^$

И это будет соответствовать (грубо) электронному письму или пустой строке:

(^$|^.*@.*\..*$)
Дэйв Чайлд
источник
1
Что нужно учитывать, выполнение ^ (|. * ​​@. * \ .. *) $ должно иметь тот же эффект, что и пустое значение, или это с использованием только ^ и $ один раз, чтобы немного привести его в порядок.
Runevault
1
Это довольно старый вопрос, но я только что наткнулся на него и не смог найти ответ. Бывают случаи, когда начало строки скрыто, но по-прежнему сопоставляется ^, когда фактически вы ищете электронное письмо или ничего в середине строки. Для этого (email_regex)?подходит лучше.
jclancy
Обязательно прочитайте, насколько сложна проверка электронной почты, прежде чем пытаться использовать для этого RegEx. stackoverflow.com/questions/201323/…
Брайан Кеннеди
Это будет соответствовать следующему электронному письму test.test@test. Этот, я думаю, лучше ^ $ | ^ [^ \ s @] + @ [^ \ s @] + \. [^ \ S @] + $, поскольку он будет принимать электронные письма вроде test@test.se
dont_trust_me
В конкретном приложении Java ^$это не работает, но ^(?!.)работает: [ ^начало строки, (?!)отрицательный просмотр вперед, .любой символ - не включая перевод строки]
LightCC
8

соответствующая пустая строка или адрес электронной почты

(^$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)

соответствует пустой строке или электронной почте, но также соответствует любому количеству пробелов

(^\s*$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)

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

http://www.regular-expressions.info/email.html

Stofke
источник
2

Приведенные выше ответы работают ($ для пустого), но я просто попробовал это, и он также работает, чтобы просто оставить пустым, например:

/\A(INTENSE_EMAIL_REGEX|)\z/i

То же в обратном порядке

/\A(|INTENSE_EMAIL_REGEX)\z/i
Химик
источник
0

Не сопоставляйте электронное письмо с регулярным выражением. Это чрезвычайно уродливо, долго и сложно, и ваш парсер регулярных выражений, вероятно, все равно не справится с этим. Попробуйте найти библиотечную процедуру для их сопоставления. Если вы хотите решить только практическую проблему сопоставления адреса электронной почты (то есть, если вам нужен неправильный код, который (обычно) работает), используйте ссылку regular-expressions.info, отправленную кем-то другим.

Что касается пустой строки, ^$она упоминается несколькими людьми и будет работать нормально.

Kevin
источник
13
Уродливое регулярное выражение на самом деле может обрабатываться парсерами регулярных выражений. Не использовать регулярное выражение только потому, что оно уродливо, глупо.
Питер
Это неконструктивно. RegEx опробован и протестирован (и далеко не уродлив - можно ли сказать, как он работает довольно элегантно?). Расплывчатое предложение библиотеки без каких-либо указаний по поводу возможного решения вообще сводит на нет цель ответа. Всем нужно добавить в закладки: code.tutsplus.com/tutorials/…
pimbrouwers
Регулярные выражения, как известно, трудно читать, поддерживать и отлаживать, что делает их главным кандидатом на замену вызовом библиотеки.
einnocent
2
Для справки: я бы с радостью порекомендовал конкретную библиотеку, если бы знал, какой язык использует OP. Поскольку это вопрос, не зависящий от языка, мои возможности довольно ограничены.
Кевин
2
Регулярное выражение не должно быть красивым. По этой логике никто никогда не должен использовать регулярное выражение. Если вы так категорично относитесь к замене библиотеки, как вы думаете, что она собирается делать? Он либо будет иметь очень длинный и сложный код, либо будет использовать регулярное выражение ... К этому моменту вы можете просто реализовать свою собственную «библиотеку». И в настоящее время, если кто-то не знает, как использовать регулярное выражение, ему, вероятно, все равно не стоит
Эндрю
0

это решит, он примет пустую строку или точный идентификатор электронной почты

"^$|^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"
Лиджиш Бхаван
источник
2
не могли бы вы быть более наглядным.
Vinay Prajapati
0

Я предпочитаю /^\s+$|^$/giсопоставлять пустые и пустые места.

console.log("  ".match(/^\s+$|^$/gi));
console.log("".match(/^\s+$|^$/gi));

ThomasReggi
источник
3
Если вы используете ^ \ s * $, вам не нужен регистр или. Также нет необходимости в модификаторах g или i, поскольку они соответствуют всей строке и не содержат никаких символов с регистром.
Cadoo
0

Если вы используете его внутри рельсов - активную проверку записи вы можете установить allow_blank: true

Так как:

validates :email, allow_blank: true, format: { with: EMAIL_REGEX }
Сальма Гомаа
источник