2011-10-24 3 views

risposta

40

Ecco come:

Utilizzando io stesso ...

<h:inputText id="email" value="#{settingsBean.aFriendEmail}" required="true" label="Email" validatorMessage="#{settingsBean.aFriendEmail} is not valid"> 
    <f:validateRegex pattern="[\w\.-]*[a-zA-Z0-9_]@[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]" /> 
</h:inputText> 
<p:message for="email" /> 

Daniel.

+0

come per aggiornare la regex precedente per rendere solo i domini validi: .com, .net, .org, .edu? anche qualche idea su come perdere questa convalida in focus? –

+3

Ecco come: '' – Daniel

+0

Non funziona per una e-mail completamente valida contenente il segno più, come nome + [email protected] – Igor

9

Ecco la mia versione e funziona bene:

<f:validateRegex pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$" /> 

e ho fatto una demo here

48

Tutti espressione regolare tenta di convalidare il formato e-mail in base a latini personaggi sono rotto. Non supportano internationalized domain names disponibili dal maggio 2010. Sì, avete letto bene, i caratteri non latini sono da allora consentiti nei nomi di dominio e quindi anche negli indirizzi di posta elettronica.

Sono quindi molti i possibili caratteri da convalidare. La cosa migliore è semplicemente mantenerla semplice. La seguente espressione regolare convalida il formato dell'email in base al verificarsi dei caratteri @ e ..

<f:validateRegex pattern="([^[email protected]]+)(\.[^[email protected]]+)*@([^[email protected]]+\.)+([^[email protected]]+)" /> 

Ancora una volta, questo solo convalida il formato e-mail generale, non se l'e-mail in sé è legittimo. Si può ancora inserire [email protected] come indirizzo e passare la convalida. Nessuna regex può coprirlo. Se la validità dell'indirizzo email è così importante, combinala con un sistema di autenticazione. Basta inviare una specie di e-mail di attivazione con un link di richiamo all'indirizzo e-mail in questione e lasciare che l'utente effettui il login per e-mail.

+0

una e-mail [email protected] è una e-mail valida ma non è convalidata da questo modello regolare ancora +1 per l'applicazione – Anas

+2

@anas: Funziona per me. Forse hai bisogno di doppi backslash? – BalusC

+0

Sì, forse i doppi backslash dovrebbero essere eseguiti, ho copiato la tua regex e ho provato, ma non ha funzionato solo per questa email. – Anas

0

Questo supporta i nomi di dominio Unicode in email:

<f:validateRegex pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[\p{L}\p{M}\p{N}.-]*(\.[\p{L}\p{M}]{2,})$" /> 

... e questa convalida e-mail solo quando viene immesso e-mail (e-mail non è richiesto campo in forma):

<f:validateRegex pattern="(^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[\p{L}\p{M}\p{N}.-]*(\.[\p{L}\p{M}]{2,})$)?" />