Użyłem walidatora jquery do sprawdzania poprawności.Mam 50 darmowych e-maili, takich jak (gmail.com, yahoo.com), więc muszę je zweryfikować. Wybrałem tablicę, a następnie zapisałem wszystkie e-maile w tablicy. Proszę spojrzeć na mój kod, a zobaczyłem, że użyłem wyrażenia regularnego. zmienna w wyrażeniu regularnym, ale nie działa dla mnie. Wystąpił błąd w ten sposób SyntaxError: niepoprawny zakres w klasie znaków
Mój kod
$.validator.addMethod("nofreeemail", function (value) {
var emails = ["gmail.com","yahoo.com","hotmail.com"]
$.each(emails,function(i, val){
console.log("email", val)
var regex = new RegExp("/^([w-.]+@(?!"+val+")([w-]+.)+[w-]{2,4})?$/");
console.log("regex", regex)
return regex.test(value);
});
}, "Free email addresses are not allowed.");
Odpowiedzi:
2 dla odpowiedzi № 1Napiszę odpowiedź, ponieważ nie jest tu jasne, co się dzieje, ale przyczyny leżące u jej podstaw są dość powszechne.
Używasz notacji konstruktora do zdefiniowania wyrażenia regularnego. Jest to prawidłowe podejście, gdy trzeba dynamicznie budować wzór za pomocą zmiennej. Jednak dosłowny ukośnik odwrotny musi być zapisany jako "\"
. Wszystkie pojedyncze ukośniki odwrotne są usuwane. W związku z tym pojawia się błąd od [w-.]
zamienia się w [w-.]
i jest to nieważna klasa znaków. Ponadto ograniczniki regex (te /..../
wokół wzorca) nigdy nie powinno się używać w notacji konstruktora, chyba że naprawdę trzeba dopasować ciąg zamknięty /
.
Poza tym twój emails
zawierają nie-słowa i musisz ich unikać.
Posługiwać się
var regex = new RegExp("^([\w-.]+@(?!"+val.replace(/[-/\^$*+?.()|[]{}]/g,"\$&")+")([\w-]+\.)+[\w-]{2,4})?$");
Wierzę też, że kropka w ([w-]+.)+
musi uciekać, ma dopasować literalną kropkę,