Regex stringa vuota o e-mail


127

Ho trovato molta convalida della posta elettronica Regex in SO ma non ne ho trovate nessuna che accetti una stringa vuota. Questo è possibile solo attraverso Regex? Accettare una stringa vuota o solo e-mail? Voglio avere questo solo su Regex.

Risposte:


311

Questo modello regex corrisponderà a una stringa vuota:

^$

E questo corrisponderà (rozzamente) a un'email o a una stringa vuota:

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

1
Qualcosa da considerare, fare ^ (|. * ​​@. * \ .. *) $ dovrebbe avere lo stesso effetto che dice vuoto o questo usando solo ^ e $ una volta, per riordinare un po '.
Runevault,

1
È piuttosto vecchio, ma mi sono appena imbattuto in questo e ho avuto problemi con la risposta. Ci sono casi in cui l'inizio di una stringa è nascosto ma è ancora abbinato ^, dove effettivamente stai cercando un'email o niente nel mezzo di una stringa. Per questo (email_regex)?è più adatto.
jclancy,

Assicurati di leggere quanto è estremamente complicata la convalida della posta elettronica, prima di provare a utilizzare RegEx per farlo. stackoverflow.com/questions/201323/…
bryan kennedy,

Questo corrisponderà alla seguente email test.test@test. Questo è meglio penso ^ $ | ^ [^ \ s @] + @ [^ \ s @] + \. [^ \ S @] + $ in quanto accetterà email come test@test.se
dont_trust_me

In una particolare applicazione Java, il ^$non funziona, ma ^(?!.)funziona: [ ^inizio stringa, (?!)lookahead negativo, .qualsiasi carattere - escluso il linefeed]
LightCC

8

corrispondenza stringa vuota o e-mail

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

corrispondenza stringa vuota o e-mail ma anche qualsiasi quantità di spazio bianco

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

vedere di più sulla regex di corrispondenza e-mail stessa:

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


2

Le risposte sopra funzionano ($ per vuoto), ma ho appena provato questo e funziona anche per lasciare vuoto così:

/\A(INTENSE_EMAIL_REGEX|)\z/i

Stessa cosa in ordine inverso

/\A(|INTENSE_EMAIL_REGEX)\z/i

0

Non abbinare un'e-mail a una regex. È estremamente brutto, lungo e complicato e il tuo parser regex probabilmente non può gestirlo comunque. Prova a trovare una routine di libreria per abbinarli. Se vuoi solo risolvere il problema pratico della corrispondenza di un indirizzo e-mail (ovvero, se vuoi un codice errato che accade (di solito) funziona), usa il link regular-expressions.info inviato da qualcun altro.

Per quanto riguarda la stringa vuota, ^$è menzionata da più persone e funzionerà bene.


13
La brutta regex può infatti essere gestita dai parser regex. Non usare un regex solo perché è brutto è sciocco.
Peter,

Questo non è costruttivo. RegEx è provato e testato (e tutt'altro che brutto - diresti che è abbastanza elegante come funziona?). Suggerire vagamente una biblioteca senza alcuna guida su una possibile soluzione sconfigge lo scopo di rispondere a tutti. Tutti hanno bisogno di aggiungere un
pimbrouwers,

I regex sono notoriamente difficili da leggere, mantenere e eseguire il debug, il che li rende un candidato privilegiato per la sostituzione con una chiamata a una biblioteca.
einnocent,

2
Per la cronaca: raccomanderei volentieri una biblioteca specifica se sapessi quale lingua stava usando OP. Poiché questa è una domanda indipendente dalla lingua, le mie opzioni sono piuttosto limitate.
Kevin,

2
Regex non dovrebbe essere carino. Secondo quella logica, nessuno dovrebbe mai usare regex. Se sei così irremovibile riguardo alla sostituzione di una biblioteca, cosa pensi che farà la biblioteca? O avrà un codice molto lungo e complicato, o utilizzerà regex ... A quel punto potresti anche implementare la tua "libreria". E al giorno d'oggi, se qualcuno non sa come usare regex, probabilmente non dovrebbe essere incaricato di convalidare comunque gli indirizzi e-mail ...
Andrew

0

questo risolverà, accetterà una stringa vuota o esatterà un ID email

"^$|^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"

2
potresti essere un po 'più descrittivo.
Vinay Prajapati,

0

Preferisco /^\s+$|^$/giabbinare spazi vuoti e vuoti.

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


3
Se usi ^ \ s * $ non hai bisogno del caso o. Inoltre, non sono necessari modificatori g o i poiché questo corrisponde all'intera riga e non coinvolge alcun carattere con maiuscole e minuscole.
Cadoo,

0

Se lo si utilizza su rotaie, è possibile impostare la convalida di activerecord allow_blank: true

Come:

validates :email, allow_blank: true, format: { with: EMAIL_REGEX }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.