/ / Jquery sprawdza poprawność darmowych wiadomości e-mail za pomocą walidatora - javascript, jquery, regex

Jquery sprawdza poprawność darmowych wiadomości e-mail za pomocą walidatora - javascript, jquery, regex

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 № 1

Napiszę 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ę,