2012-09-20 13 views
14

Uważam, że wtyczka sprawdzania poprawności jQuery jest niewystarczająca dla moich wymagań. Przyjmuje każdy adres e-mail [email protected] jako prawidłowy adres e-mail, ale chcę mieć możliwość dostarczenia tego regex/^([a-zA-Z0-9_.-+])+\@(([a-zA -Z0-9 -]) +.) + ([A-zA-Z0-9] {2,4}) + $/aby zatwierdzić kompletną. Com część adresu. Bardziej niepokoi mnie możliwość dostarczenia własnego wyrażenia regularnego niż uzyskanie regexu z dowodem głupi (ponieważ nie ma sprawdzonego regex do sprawdzania poprawności poczty e-mail)zastępowanie sprawdzania poprawności adresu e-mail wtyczki jquery

Po prostu FYI: Robię również sprawdzanie po stronie serwera, ale w tym momencie Nie martwię się o to, który regex adresu e-mail jest poprawny.

Czy istnieje sposób, aby to zrobić w sekcji "zasady" jQuery validate plugin?

To moje zasady sekcja teraz:

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

Odpowiedz

21

nie będę tego robić, ale przez wzgląd na odpowiedź trzeba dodać własną walidację niestandardową.

//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" 
); 

Następnie dodać do swoich zasad:

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

błąd tutaj, w regex: return /^([a-zA-Z0-9_.\-+])+\@ (([a-zA-Z0-9 -]) +.) + ([a-zA-Z0-9] {2,4}) + $ /. test (wartość); –

+2

@Dom: sprawdzanie poprawności adresu e-mail jest nieprawidłowe. Powinno to być '' return /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/. test (wartość); '** –

+2

czy mógłbyś wyjaśnić, dlaczego nie zrobiłbyś tego? – wal

6

Twój regex jest po prostu zbyt surowe, jQuery ma rację.

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

Proponuję przeczytać: Stop Validating Email Addresses With Your Complex Regex

+1

W prawdziwym życiu, każdy na adres e-mail ma .TLD i tylko spamerzy mają przypadków krawędzi znaków. – Acyra

+0

@Acyra Możesz napisać kod, który działa tylko czasami i przez przypadek. Ale wielu programistów woli pisać kod, który podąża za standardem i który działa ze wszystkimi e-mailami, nie tylko tymi, które już widziałeś. –

+0

Jest to z mojej wiedzy. Czy e-mail jak xxx @ xxx jest technicznie możliwy? (brak sufiksu .xx). Domyślna wtyczka do sprawdzania poprawności pozwala na to. – 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

Podczas gdy ten kod może odpowiedzieć na pytanie, proszę rozważyć podanie pewnych wyjaśnień, aby pomóc OP zrozumieć rozwiązanie i pomóc innym czytelnikom, którzy mogą mieć podobny problem. – CodeMouse92

Powiązane problemy