0Pricing
HTML Academy · Lekcja

Constraint Validation API

Odczytywanie stanów poprawności i sprawdzanie ograniczeń za pomocą JavaScript

Constraint Validation API to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej HTML Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs HTML Academy zawiera 4 lekcji w sumie.

Walidacja bez JavaScriptu

HTML5 wprowadził wbudowaną walidację formularzy za pomocą atrybutów: required, type="email", type="number", min, max, pattern, minlength, maxlength. Przeglądarka automatycznie przeprowadza walidację podczas wysyłania formularza i wyświetla komunikaty o błędach — bez konieczności używania JS.

<input type="email" name="email" required>
<input type="number" name="age" min="18" max="120" required>
<input type="text" name="phone" pattern="\d{10}" required>

Selektory CSS do walidacji

:invalid dopasowuje pola, które nie przechodzą walidacji, a :valid — pola, które ją przechodzą. :user-invalid (nowoczesny selektor) dopasowuje pola dopiero po interakcji użytkownika, dzięki czemu nietknięty formularz nie jest od razu oznaczany czerwonym obramowaniem. Do stylizowania błędów należy używać tych pseudoklas.

input:user-invalid {
  border-color: red;
}
input:user-invalid + .error {
  display: block;
}

Obiekt ValidityState

Każdy element formularza udostępnia właściwość validity — obiekt ValidityState z flagami logicznymi: valid, valueMissing, typeMismatch, patternMismatch, rangeUnderflow, tooShort itd. Należy je sprawdzać, aby zdecydować, który błąd wyświetlić.

const input = form.querySelector("input[type=email]");
if (input.validity.typeMismatch) {
  showError(input, "Please enter a valid email address");
}

Metoda checkValidity

input.checkValidity() zwraca true, jeśli wartość spełnia wszystkie ograniczenia, a w przeciwnym razie zwraca false. form.checkValidity() sprawdza cały formularz. Jest to przydatne podczas programowych kontroli przed wykonaniem żądania AJAX lub przed zezwoleniem użytkownikowi na przejście dalej w wieloetapowym formularzu.

Metoda reportValidity

input.reportValidity() działa podobnie jak checkValidity, ale dodatkowo wyświetla wbudowaną podpowiedź przeglądarki i ustawia fokus na pierwszym nieprawidłowym polu. Należy użyć tej metody, gdy chcą Państwo bez dodatkowej pracy korzystać z natywnego interfejsu; checkValidity sprawdzi się wtedy, gdy wyświetlanie błędów ma być w pełni niestandardowe.

Dostosowywanie wbudowanych komunikatów

Domyślne komunikaty przeglądarki ("Please fill out this field") mogą nie pasować do przyjętego tonu ani języka. Można je zastąpić za pomocą input.setCustomValidity("Enter a valid coupon code"). Pole pozostaje nieprawidłowe, dopóki komunikat nie zostanie wyczyszczony przez setCustomValidity("").

novalidate wyłącza interfejs przeglądarki

Dodanie atrybutu novalidate do formularza wyłącza domyślne zachowanie przeglądarki związane z walidacją. Jest to przydatne podczas implementowania w pełni niestandardowego wyświetlania błędów — formularz nadal zostanie wysłany niezależnie od tego, czy przeszedłby walidację, dlatego przed wysłaniem należy sprawdzić go programowo.

Nasłuchiwanie zdarzeń invalid

Każdy element formularza emituje zdarzenie invalid, gdy walidacja się nie powiedzie. Należy go obsłużyć, aby wyłączyć domyślną podpowiedź i wyświetlić niestandardowy komunikat: input.addEventListener("invalid", (e) => { e.preventDefault(); showError(input); }).

pattern z wyrażeniami regularnymi

Atrybut pattern zawiera wyrażenie regularne JavaScriptu, któremu wartość musi odpowiadać w całości (nie trzeba dodawać kotwic ^ i $ — są stosowane niejawnie). Warto połączyć go z atrybutem title, aby opisać użytkownikom oczekiwany format.

Walidacja po stronie serwera nadal wymagana

Walidacja HTML jest udogodnieniem dla użytkowników — każdy może ją ominąć, edytując DOM. Zawsze należy ponownie przeprowadzać walidację na serwerze. Ograniczenia HTML służą poprawie UX (natychmiastowej informacji zwrotnej i zmniejszeniu liczby żądań), a nie zapewnieniu bezpieczeństwa.

Łączenie wielu ograniczeń

Ograniczenia się łączą: <input type="number" min="18" max="120" required step="1"> musi mieć wartość, która jest liczbą całkowitą z zakresu od 18 do 120. Przeglądarka udostępnia informacje o tym, które konkretne ograniczenie nie zostało spełnione, za pomocą flag ValidityState, dzięki czemu można wyświetlić właściwy komunikat.

Sprawdzenie wiedzy

Czym pseudoklasa CSS :user-invalid różni się od :invalid?

Podsumowanie

Natywne atrybuty walidacji (required, type, pattern, min, max) oraz API ValidityState zapewniają rozbudowaną walidację po stronie klienta, domyślnie bez JS. CSS :user-invalid stylizuje błędy dopiero po interakcji użytkownika. checkValidity/reportValidity służą do programowych kontroli. setCustomValidity zastępuje domyślne komunikaty. Zawsze należy ponownie przeprowadzać walidację na serwerze.

Często zadawane pytania

Czy lekcja „Constraint Validation API” jest bezpłatna?

Tak — pełny tekst „Constraint Validation API” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu HTML Academy, przejdź na CoddyKit PRO. Kurs HTML Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Constraint Validation API”?

Odczytywanie stanów poprawności i sprawdzanie ograniczeń za pomocą JavaScript Ćwiczysz HTML Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć HTML Academy?

Nie wymagamy żadnego doświadczenia. HTML Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Constraint Validation API”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji HTML Academy?

Tak. Każda lekcja HTML Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. FormData API
  2. Constraint Validation API
  3. reportValidity i setCustomValidity
  4. Zdarzenia resetowania formularza i zarządzanie stanem
← Powrót do HTML Academy