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.

Respostas:


311

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

^$

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

(^$|^.*@.*\..*$)

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 test@test.se
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


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

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.


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})+)$"

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));


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 }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.