Pracując z pluginem jQuery validation czasami okazuje się, że domyślnie wbudowane walidatory są niewystarczające dla naszych potrzeb. W takiej sytuacji nie pozostaje nic innego, jak stworzenie własnych walidatorów.
Dodawanie własnej metody walidującej
Aby dodać własną metodę walidującą należy skorzystać z następującej funkcji jQuery validation:
jQuery.validator.addMethod(name, validationFunction, message);
Jako parametry funkcja ta przyjmuje:
- name – nazwa walidatora
- validationFunction – funkcja walidująca pole
- message – komunikat zwracany, gdy wartość walidowanego pola jest nieprawidłowa
Funkcja walidująca jest anonimowa i ma następującą postać:
function(value, element, param);
Jako parametry przyjmuje ona:
- value – wartość pola
- element – walidowane pole formularza
- param – dodatkowe parametry dla metody walidującej
Jak widać dodawanie nowej metody walidującej do jQuery validate jest bardzo proste. Dla przykładu poniżej zamieszczam kody kilku metod walidujących, które mogą przydać się w codziennej pracy.
Walidator sprawdzający, czy ilość znaków w danym polu ma dokładnie ustaloną wartość
jQuery.validator.addMethod("exactlength", function(value, element, param) { return this.optional(element) || value.length == param; }, jQuery.format("Please enter exactly {0} characters."));
Użycie walidatora:
$("#form").validate({ rules: { zipCode: { exactlength: 5 } } });
Walidator sprawdzający czy w polu formularza występują tylko i wyłącznie litery
jQuery.validator.addMethod("lettersonly", function(value, element) { return this.optional(element) || /^[a-z]+$/i.test(value); }, "Letters only please");
Użycie walidatora
$("#form").validate({ rules: { firstName: { lettersonly: true } } });
Generyczny walidator sprawdzający zawartość pola zadanym wyrażeniem regularnym
jQuery.validator.addMethod("accept", function(value, element, param) { return value.match(new RegExp("." + param + "$")); });
Użycie walidatora ze sprawdzeniem czy w polu formularza są tylko cyfry:
$("#form").validate({ rules: { someNumberField: { accept: "[0-9]+" } } });
Użycie walidatora ze sprawdzeniem czy w polu formularza są tylko litery:
$("#form").validate({ rules: { someNumberField: { accept: "[a-zA-Z]+" } } });
Jak widać dodawanie własnych metod walidujących jest dość proste. Jedyna rzeczą, o której należy pamiętać jest dodanie własnych metod walidujących przed wywołaniem metody validate();