2008-11-19 47 views
10

Tôi đang sử dụng plugin jQuery.Validation để xác thực phía máy khách và trong số những thứ khác tôi xác thực địa chỉ email. Bây giờ tôi cũng muốn xác nhận ở phía máy chủ (đối với người dùng không có javascript vv). Vì thiếu ý tưởng tốt hơn, tôi bắt đầu với một regex, nhưng khá sớm, tôi nhận ra rằng tôi muốn quan trọng để sử dụng các yêu cầu tương tự như phương pháp jQuery. Ngoài ra, nếu tôi có thể tìm thấy một số cách để ghi đè lên các yêu cầu xác nhận jQuery với của riêng tôi, đó là OK.Yêu cầu xác thực email jQuery

Có ai biết yêu cầu của phương pháp jQuery nào không? Là nó xác nhận regex, và, trong trường hợp nó là, biểu thức là gì? Có cách nào để ghi đè nó, ngay cả khi tôi không biết?

(Tôi đã lưu ý rằng nó có thể phôi xác nhận từ xa, nhưng nếu có thể tôi muốn tránh lưu lượng mạng thêm này ...)

Trả lời

22

Nguồn cho plugin xác nhận của jQuery không thực sự sử dụng một regex quái vật. Bạn sẽ có thể áp dụng cùng một regex ở phía máy chủ trong ngôn ngữ của hệ thống của bạn.

Dưới đây là các nguồn:

// http://docs.jquery.com/Plugins/Validation/Methods/email 
email: function(value, element) { 
    // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/ 
    return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(element.value); 
}, 

Dưới đây là chỉ là phần regex:

/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0- 
\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900- 
\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([ 
\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF 
\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF 
\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(
\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[ 
\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF 
\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0- 
\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[ 
\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF 
\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF] 
)))\.?$/ 

EDIT: Tôi không để ý trước nhưng một số các ký tự trong regex đã được ăn như đánh dấu. Tôi đặt nó trong một khối mã và thêm dòng mới. Lưu ý rằng những dòng mới là "dễ đọc" và không phải là một phần của regex thực tế.

+1

đó là một con quái vật! =) cảm ơn rất nhiều! –

Các vấn đề liên quan