Regex cadena vacía o correo electrónico

127

Encontré mucha validación de correo electrónico Regex en SO, pero no encontré ninguna que acepte una cadena vacía. ¿Es esto posible solo a través de Regex? ¿Acepta cadena vacía o solo correo electrónico? Quiero tener esto solo en Regex.

robar waminal
fuente

Respuestas:

311

Este patrón de expresiones regulares coincidirá con una cadena vacía:

^$

Y esto coincidirá (groseramente) con un correo electrónico o una cadena vacía:

(^$|^.*@.*\..*$)
Dave Child
fuente
1
Algo a considerar, hacer ^ (|. * ​​@. * \ .. *) $ debería tener el mismo efecto que dice ya sea en blanco o esto con solo usar ^ y $ una vez, para ordenarlo un poco.
Runevault
1
Esto es bastante viejo, pero me topé con esto y tuve problemas con la respuesta. Hay casos en los que el comienzo de una cadena está oculto pero aún coincide ^, por lo que efectivamente está buscando un correo electrónico o nada en el medio de una cadena. Para esto (email_regex)?es más adecuado.
jclancy
Asegúrese de leer qué tan complicada es la validación de correo electrónico, antes de intentar usar RegEx para hacerlo. stackoverflow.com/questions/201323/…
bryan kennedy
Esto coincidirá con el siguiente correo electrónico test.test@test. Este es mejor, creo que ^ $ | ^ [^ \ s @] + @ [^ \ s @] + \. [^ \ S @] + $ ya que aceptará correos electrónicos como [email protected]
dont_trust_me
En una aplicación Java en particular, ^$no funciona, pero ^(?!.)sí: [ ^inicio de cadena, (?!)búsqueda .
anticipada
8

coincidencia de cadena vacía o correo electrónico

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

coincidencia de cadena vacía o correo electrónico, pero también coincide con cualquier cantidad de espacio en blanco

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

ver más sobre el regex de correspondencia de correo electrónico en sí:

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

Stofke
fuente
2

Las respuestas anteriores funcionan ($ para vacío), pero acabo de intentar esto y también funciona para dejarlo vacío así:

/\A(INTENSE_EMAIL_REGEX|)\z/i

Lo mismo en orden inverso

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

No haga coincidir un correo electrónico con una expresión regular. Es extremadamente feo, largo y complicado y su analizador de expresiones regulares probablemente no pueda manejarlo de todos modos. Intenta encontrar una rutina de biblioteca para unirlos. Si solo quieres resolver lo práctico problema de hacer coincidir una dirección de correo electrónico (es decir, si desea un código incorrecto que generalmente funciona), use el enlace regular-expressions.info que otra persona envió.

En cuanto a la cadena vacía, ^$es mencionada por varias personas y funcionará bien.

Kevin
fuente
13
La expresión regular fea puede de hecho ser manejada por analizadores de expresiones regulares. No usar una expresión regular solo porque es feo es tonto.
Peter
Esto no es constructivo. RegEx se prueba y prueba (y lejos de ser feo, ¿diría que es bastante elegante cómo funciona?). Sugerir vagamente una biblioteca sin ninguna orientación sobre una posible solución anula el propósito de responder. Todos necesitan marcar: code.tutsplus.com/tutorials/…
pimbrouwers
Las expresiones regulares son notoriamente difíciles de leer, mantener y depurar, lo que las convierte en un excelente candidato para el reemplazo mediante una llamada a una biblioteca.
inocente
2
Para el registro: con mucho gusto recomendaría una biblioteca específica si supiera qué idioma está utilizando OP. Como esta es una pregunta independiente del idioma, mis opciones son bastante limitadas.
Kevin
2
Se supone que Regex no es bonita. Según esa lógica, nadie debería usar regex. Si eres tan inflexible con una biblioteca que la reemplaza, ¿qué crees que va a hacer esa biblioteca? Va a tener un código muy largo y complicado, o va a usar expresiones regulares ... En ese punto, también podría implementar su propia "biblioteca". Y hoy en día, si alguien no sabe cómo usar expresiones regulares, probablemente no se les debe asignar la tarea de validar las direcciones de correo electrónico de todos modos ...
Andrew
0

esto resolverá, aceptará una cadena vacía o exactamente una identificación de correo electrónico

"^$|^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"
Lijish Bhavan
fuente
2
podrías ser un poco más descriptivo.
Vinay Prajapati
0

Prefiero /^\s+$|^$/giunir espacios vacíos y vacíos.

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

ThomasReggi
fuente
3
Si usa ^ \ s * $ no necesita el caso o. Además, no hay necesidad de modificadores g o i ya que esto coincide con la línea completa y no involucra caracteres con mayúsculas.
Cadoo
0

Si lo está utilizando dentro de rieles: validación de registro activo puede establecer allow_blank: true

Como:

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