2012-09-20 35 views
14

Tôi thấy rằng plugin xác thực hợp lệ jQuery không đủ cho yêu cầu của tôi. Nó chấp nhận bất kỳ địa chỉ email [email protected] như một địa chỉ email hợp lệ trong khi tôi muốn để có thể cung cấp regex này /^([a-zA-Z0-9_.-+])+\@(([a-zA -Z0-9 -]) +.) + ([A-zA-Z0-9] {2,4}) + $/để nó xác nhận phần .com đầy đủ của địa chỉ. Tôi quan tâm nhiều hơn đến việc có thể cung cấp regex của riêng tôi hơn là nhận được một bằng chứng chứng minh lừa (vì không có regex bằng chứng lừa để xác thực email)ghi đè jquery xác nhận hợp lệ địa chỉ email plugin

Chỉ cần FYI: Tôi cũng đang xác thực phía máy chủ nhưng tại thời điểm này Tôi không lo lắng về địa chỉ email regex nào là đúng.

Có cách nào để thực hiện điều đó trong phần "quy tắc" của jQuery xác nhận plugin không?

Đây là phần quy tắc của tôi ngay bây giờ:

rules: { 
         email: { 
          required: { 
            depends:function(){ 
             $(this).val($.trim($(this).val())); 
             return true; 
            } 
           }, 
          email: true 
         }, 

Trả lời

21

Tôi sẽ không làm điều này, nhưng vì lợi ích của một câu trả lời bạn cần thêm xác nhận tùy chỉnh của riêng bạn.

//custom validation rule 
$.validator.addMethod("customemail", 
    function(value, element) { 
     return /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(value); 
    }, 
    "Sorry, I've enabled very strict email validation" 
); 

Sau đó, để quy tắc của bạn thêm:

rules: { 
        email: { 
         required: { 
           depends:function(){ 
            $(this).val($.trim($(this).val())); 
            return true; 
           } 
          }, 
         customemail: true 
        }, 
+0

lỗi ở đây, trong regex: trả lại /^([a-zA-Z0-9_.\-+])+\@ (([a-zA-Z0-9 -]) +.) + ([a-zA-Z0-9] {2,4}) + $ /. kiểm tra (giá trị); –

+2

@Tom: regex xác thực email sai. Nó phải là ** 'return /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/. kiểm tra (giá trị); '** –

+2

bạn có thể vui lòng giải thích tại sao bạn không làm điều này? – wal

6

regex của bạn chỉ đơn giản là quá khắt khe, jQuery là đúng.

"this is a valid adress !"@yes.it.is 

Tôi đề nghị bạn đọc: Stop Validating Email Addresses With Your Complex Regex

+1

Trong cuộc sống thực, địa chỉ email của mọi người đều có một .TLD và chỉ spammer có trường hợp cạnh ký tự. – Acyra

+0

@Acyra Bạn được tự do viết mã chỉ hoạt động đôi khi và do tai nạn. Nhưng nhiều lập trình viên thích viết mã theo tiêu chuẩn và nó hoạt động với tất cả các email, không chỉ các email bạn đã thấy. –

+0

Đó là sự hiểu biết của tôi. Email có giống như xxx @ xxx về mặt kỹ thuật có thể không? (không có hậu tố .xx). Plugin xác nhận mặc định cho phép nó. – Mark

0
// Add Custom Email Validation 
jQuery.validator.addMethod('customemail', function (emailaddr, element) { 
     emailaddr = emailaddr.replace(/\s+/g, ''); 
     return this.optional(element) || 
     emailaddr.match(/^\b[A-Z0-9._%-][email protected]@[A-Z0-9.-]+\.[A-Z]{2,4}\b$/i); 
}); 
+0

Trong khi mã này có thể trả lời câu hỏi, vui lòng xem xét một số giải thích để giúp OP hiểu giải pháp và giúp người đọc khác có vấn đề tương tự. – CodeMouse92

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