Regex string vazia ou email

127

Encontrei muita validação de e-mail Regex no SO, mas não encontrei nenhuma que aceite uma sequência vazia. Isso é possível apenas através do Regex? Aceitando apenas sequência vazia ou email? Eu quero ter isso apenas no Regex.

Rob Waminal
fonte

Respostas:

311

Este padrão regex corresponderá a uma cadeia vazia:

^$

E isso corresponderá (grosseiramente) a um email ou a uma string vazia:

(^$|^.*@.*\..*$)
Dave Child
fonte
1
Algo a considerar, fazer ^ (|. * ​​@. * \ .. *) $ deve ter o mesmo efeito que está em branco ou com apenas o uso de ^ e $ uma vez, para arrumar um pouco.
Runevault 24/02
1
Isso é bem antigo, mas eu apenas me deparei com isso e tive problemas com a resposta. Há casos em que o início de uma string está oculto, mas ainda é correspondido ^, em que efetivamente você está procurando um email ou nada no meio de uma string. Pois isso (email_regex)?é mais adequado.
jclancy
Certifique-se de ler como a validação de email é extremamente complicada, antes de tentar usar o RegEx para fazer isso. stackoverflow.com/questions/201323/...
Bryan Kennedy
Isso corresponderá ao seguinte email test.test@test. Este é melhor, acho que ^ $ | ^ [^ \ s @] + @ [^ \ s @] + \. [^ \ S @] + $, pois aceita e-mails como [email protected]
dont_trust_me
Em um aplicativo Java específico, ^$ele não funciona, mas ^(?!.)funciona: [ ^início da sequência de caracteres, (?!)aparência negativa, .qualquer caractere - não incluindo o
avanço de
8

correspondência vazia ou email

(^$|^[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)$)

correspondência de string ou email vazio, mas também de qualquer quantidade de espaço em branco

(^\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)$)

veja mais sobre o próprio regex de correspondência de email:

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

Stofke
fonte
2

As respostas acima funcionam ($ para vazio), mas tentei isso e também funciona para deixar vazio da seguinte maneira:

/\A(INTENSE_EMAIL_REGEX|)\z/i

A mesma coisa na ordem inversa

/\A(|INTENSE_EMAIL_REGEX)\z/i
Químico
fonte
0

Não combine um email com uma expressão regular. É extremamente feio, longo e complicado, e seu analisador de expressões regulares provavelmente não consegue lidar com isso de qualquer maneira. Tente encontrar uma rotina de biblioteca para combiná-los. Se você deseja resolver apenas o problema prático de corresponder um endereço de email (ou seja, se você deseja que o código errado funcione (normalmente)), use o link regular-expressions.info que alguém enviou.

Quanto à string vazia, ^$é mencionada por várias pessoas e funcionará bem.

Kevin
fonte
13
Regex feio pode de fato ser tratado por analisadores de regex. Não usar um regex apenas porque é feio é bobo.
Peter
Isso não é construtivo. O RegEx é experimentado e testado (e longe de ser feio - você diria que é bastante elegante como funciona?). Sugerir vagamente uma biblioteca sem qualquer orientação sobre uma possível solução anula o propósito de responder. Todo mundo precisa marcar: code.tutsplus.com/tutorials/…
pimbrouwers
Regexes são notoriamente difíceis de ler, manter e depurar, o que os torna um candidato principal para substituição por uma chamada para uma biblioteca.
einnocent
2
Para o registro: eu recomendaria de bom grado uma biblioteca específica se soubesse qual idioma o OP estava usando. Como essa é uma questão independente da linguagem, minhas opções são bastante limitadas.
24415 Kevin
2
Regex não deveria ser bonito. Por essa lógica, ninguém deve usar regex. Se você é tão inflexível quanto à substituição de uma biblioteca, o que você acha que ela fará? Ou ele terá um código muito longo e complicado ou usará o regex ... Nesse ponto, você também pode simplesmente implementar sua própria "biblioteca". E hoje em dia, se alguém não sabe como usar regex, eles provavelmente não deveria ser encarregado de validar os endereços de e-mail de qualquer maneira ...
Andrew
0

isso resolverá, aceitará uma string vazia ou exigirá um ID de email

"^$|^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"
Lijish Bhavan
fonte
2
você poderia ser um pouco mais descritivo.
Vinay Prajapati
0

Eu prefiro /^\s+$|^$/gicombinar espaços vazios e vazios.

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

ThomasReggi
fonte
3
Se você usar ^ \ s * $, não precisará do ou case. Também não há necessidade de modificadores g ou i, pois isso corresponde a toda a linha e não envolve caracteres com maiúsculas e minúsculas.
Cadoo
0

Se você o estiver usando dentro de trilhos - validação de registro de ativo, você pode definir allow_blank: true

Como:

validates :email, allow_blank: true, format: { with: EMAIL_REGEX }
Salma Gomaa
fonte