2011-10-24 37 views

Trả lời

40

Sau đây là cách:

Sử dụng nó bản thân mình ...

<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

cách để cập nhật regex ở trên để chỉ tạo các miền hợp lệ: .com, .net, .org, .edu? cũng có bất kỳ ý tưởng nào làm cho việc xác thực này tập trung bị mất không? –

+3

Đây là cách thực hiện: '' – Daniel

+0

Không hoạt động đối với email hoàn toàn hợp lệ chứa dấu cộng, như [email protected] – Igor

9

Dưới đây là phiên bản của tôi và nó hoạt động tốt:

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

Và tôi đã làm một bản demo here

48

Tất cả các biểu hiện thường xuyên cố gắng để xác nhận các định dạng email dựa trên Latin ký tự được chia. Họ không hỗ trợ internationalized domain names có sẵn từ tháng 5 năm 2010. Có, bạn đọc nó đúng, ký tự không phải là tiếng Latin kể từ đó được phép trong tên miền và do đó cũng có địa chỉ email.

Do đó, rất nhiều ký tự có thể xác thực. Tốt nhất là giữ nó đơn giản. Regex sau chỉ xác thực định dạng email dựa trên sự xuất hiện của các ký tự @..

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

Một lần nữa, điều này chỉ xác thực định dạng email chung, cho dù email có hợp pháp hay không. Người dùng vẫn có thể nhập [email protected] làm địa chỉ và vượt qua xác thực. Không ai regex có thể bao gồm điều đó. Nếu tính hợp lệ của địa chỉ email quan trọng, hãy kết hợp nó với một hệ thống xác thực. Chỉ cần gửi một số loại email kích hoạt có liên kết gọi lại đến địa chỉ email được đề cập và cho phép người dùng đăng nhập bằng địa chỉ email.

+0

một email [email protected] là một email hợp lệ nhưng nó không được xác nhận bởi mẫu regex này vẫn +1 cho ứng dụng – Anas

+2

@anas: Làm việc cho tôi. Có lẽ bạn cần hai dấu gạch chéo ngược? – BalusC

+0

Có thể có hai dấu gạch chéo ngược sẽ làm, tôi sao chép dán regex của bạn và đã thử nhưng nó không hoạt động cho chỉ email này. – Anas

0

Cái này hỗ trợ tên miền unicode trong email:

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

... và điều này xác nhận email chỉ khi email được nhập (email không được yêu cầu lĩnh vực theo mẫu):

<f:validateRegex pattern="(^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[\p{L}\p{M}\p{N}.-]*(\.[\p{L}\p{M}]{2,})$)?" /> 
Các vấn đề liên quan