Я нашел много проверок электронной почты Regex в SO, но я не нашел ни одного, который принимает пустую строку. Возможно ли это только через Regex? Принимать только пустую строку или только электронную почту? Я хочу, чтобы это было только на Regex.
Я нашел много проверок электронной почты Regex в SO, но я не нашел ни одного, который принимает пустую строку. Возможно ли это только через Regex? Принимать только пустую строку или только электронную почту? Я хочу, чтобы это было только на Regex.
Ответы:
Этот шаблон регулярного выражения будет соответствовать пустой строке:
^$
И это будет соответствовать (грубо) электронному письму или пустой строке:
(^$|^.*@.*\..*$)
^
, когда фактически вы ищете электронное письмо или ничего в середине строки. Для этого (email_regex)?
подходит лучше.
^$
это не работает, но ^(?!.)
работает: [ ^
начало строки, (?!)
отрицательный просмотр вперед, .
любой символ - не включая перевод строки]
соответствующая пустая строка или адрес электронной почты
(^$|^[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)$)
см. подробнее о самом регулярном выражении, соответствующем электронной почте:
Не сопоставляйте электронное письмо с регулярным выражением. Это чрезвычайно уродливо, долго и сложно, и ваш парсер регулярных выражений, вероятно, все равно не справится с этим. Попробуйте найти библиотечную процедуру для их сопоставления. Если вы хотите решить только практическую проблему сопоставления адреса электронной почты (то есть, если вам нужен неправильный код, который (обычно) работает), используйте ссылку regular-expressions.info, отправленную кем-то другим.
Что касается пустой строки, ^$
она упоминается несколькими людьми и будет работать нормально.
это решит, он примет пустую строку или точный идентификатор электронной почты
"^$|^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"
Я предпочитаю /^\s+$|^$/gi
сопоставлять пустые и пустые места.
console.log(" ".match(/^\s+$|^$/gi));
console.log("".match(/^\s+$|^$/gi));
Если вы используете его внутри рельсов - активную проверку записи вы можете установить
allow_blank: true
Так как:
validates :email, allow_blank: true, format: { with: EMAIL_REGEX }