2011-10-24 13 views

Odpowiedz

40

Oto jak:

Stosując to sam ...

<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

jak zaktualizować powyższe wyrażenie, aby wprowadzić tylko prawidłowe domeny: .com, .net, .org, .edu? także wszelkie pomysły, jak sprawić, aby ta walidacja straciła ostrość? –

+3

Oto jak: '' – Daniel

+0

Nie działa w przypadku całkowicie poprawnego e-maila zawierającego znak plus, na przykład [email protected] – Igor

9

Oto moja wersja i to działa dobrze:

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

i zrobiłem demo here

48

Wszystko wyrażenie regularne próbuje potwierdzić format e-mail w oparciu o Łacińskiej bohaterów uszkodzony. Nie obsługują one internationalized domain names, które były dostępne od maja 2010 r. Tak, czytałeś to dobrze, znaki spoza alfabetu łacińskiego są od tej pory dozwolone w nazwach domen, a więc także w adresach e-mail.

Są to zatem bardzo wiele możliwych znaków do sprawdzenia. Najlepiej po prostu zachować prostotę. Poniższe wyrażenie właśnie sprawdza format wiadomości e-mail na podstawie występowania znaków @ i ..

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

Ponownie, to tylko potwierdza ogólny format e-mail, a nie to, czy e-mail jest legalny. Nadal można wpisać [email protected] jako adres i przekazać potwierdzenie. Nikt nie może tego ukryć. Jeśli ważność adresu e-mailowego jest tak ważna, połącz je z systemem uwierzytelniania. Wystarczy wysłać e-mail aktywacyjny z linkiem oddzwonienia na adres e-mail i pozwolić użytkownikowi zalogować się za pomocą adresu e-mail.

+0

e-mail [email protected] jest prawidłowym adresem e-mail, ale nie jest sprawdzany przez ten wzorzec regex nadal +1 dla aplikacji – Anas

+2

@anas: Działa dla mnie. Być może potrzebujesz podwójnych ukośników? – BalusC

+0

Tak, może zrobię podwójne ukośniki odwrotne, skopiuję wklejone wyrażenie i spróbuję, ale nie działa tylko dla tego e-maila. – Anas

0

To jeden obsługuje Unicode nazw domen w e-mail:

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

... a ten sprawdza wiadomości e-mail tylko wtedy, gdy e-mail jest wpisany (e-mail nie jest wymagane pola w formularzu):

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