Jak sprawdzić poprawność kodu pocztowego?
Jak zweryfikować czy użytkownik podał poprawny kod pocztowy, czy zachował jego poprawną formę?
Kod pocztowy, inaczej pocztowy numer adresowy to w Polsce ciąg cyfr. Dodawany do adresu, by ułatwiać sortowanie przesyłek. Wprowadzony 1 stycznia 1973 roku. Pierwsza cyfra określa okręg pocztowy, a cały PNA jest przypisany do urzędu pocztowego, albo do poszczególnych ulic i domów.
1. Walidacja za pomocą JavaScript
Poniżej kod JavaScript, który weryfikuje czy użytkownik wprowadził format CC-CCC, gdzie C to cyfra.
function checkPostalCode(code) {
const regex = /^[0-9]{2}-[0-9]{3}$/;
if (! regex.test(code.value)) {
alert('Wprowadzono błędny kod pocztowy.');
code.value = '';
}
}
Ostatnią rzeczą jest kawałek kodu HTML - formularz który wysyła dalej dane, wprowadzone przez użytkownika.
<form action="" name="form" method="post">
<input type="text" name="postal_code" onblur="checkPostalCode(this)" />
</form>
2. Walidacja za pomocą HTML5
Najszybszym sposobem jest skorzystanie z HTML5, to rozwiązanie podsunął Comandeer w komentarzu. Do pola formularza należy dodać nowy atrybut pattern. Pozwala określić wyrażenie regularne, który musi być spełnione podczas wpisywania tekstu przez użytkownika. Przy nieprawidłowym wypełnieniu formularza, nie zostanie on wysłany.
<form action="" name="form" method="post">
<input type="postal_code" pattern="^[0-9]{2}-[0-9]{3}$">
</form>
Zgodnie z powyższym przykładem kod pocztowy musi składać się z dwóch cyfr, potem myślnika i trzech cyfr, np. 00-999.
3. Walidacja za pomocą PHP
Na podstawie powyższego kodu HTML walidacja tym razem za pomocą PHP.
$postalCode = $_POST['postal_code'];
if (! isset($postalCode) || ! preg_match('/^[0-9]{2}-?[0-9]{3}$/Du', $postalCode)) {
echo 'Wprowadzono błędny kod pocztowy.';
}
Jeśli nie znasz kodu pocztowego dla określonej lokalizacji, ulicy i miasta, możesz go szybko znaleźć na stronie http://poczta-polska.pl/kody/.
Kategorie: HTML + CSS, PHP + MySQL. Tagi: #formularze, #html, #php, #skrypty. Źródło obrazków: Pixabay, Font awesome.