Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Walidacja pola - conajmniej dwa słowa
Forum PHP.pl > Forum > Przedszkole
MatBlo
Mam pewien problem, którego nie potrafię rozwiązać. Chciałbym dokonać walidacji pola "Miejscowość" w formularzu za pomocą wyrażeń regularnych. Mam następujący kod:

  1. if (empty($miejscowosc)) {
  2. $error_miejscowosc = ' Wprowadź nazwę miejscowości.';
  3. $err=true;
  4. }
  5. else if (!eregi ('^[a-zA-ZąęćżźńłóśĄĆĘŁŃÓŚŹŻ\s]+$', $_POST['miejscowosc'])) {
  6. $error_miejscowosc = ' Wprowadzono niewłaściwe znaki.';
  7. $err=true;
  8. }


Kod działa mogę wpisywać wszystkie litery bez znaków specjalnych, ale problem polega na tym, że gdy miejscowość składa się z 2 członów np Zielona Góra no to pojawia się problem i otrzymuję komunikat o błędzie, podobna sytuacja ma miejsce gdy w nazwie miejscowości jest myślnik np Jastrzębie-Zdrój
thek
Po pierwsze - eregi powinno się unikać, gdyż jest stare. Po drugie to skoro wykluczasz juz znaki, to czemu nie wykluczyłeś myślnika? Popatrz na wyrażenie regularne dokładniej i poczytaj JAK je tworzyć a znajdziesz swoje błędy smile.gif
MatBlo
To czego używać zamiast eregi?
kapuch
Np.


1. Czyli ogolnie PCRE -> http://pl.php.net/manual/pl/ref.pcre.php
2. Z tego co mi wiadomo, to nie musisz juz wypisywac wszystkich polskich znakow, tylko wystarczy taki przedzial [A-Ża-ż]
Crozin
1. Dlaczego nie będę mógł wprowadzić np. niemieckich umlautów w nazwie miejscowości?
2. O ile się nie mylę nazwy miejscowości mogą zawierać znaki specjalne, np. "/", przykładowo: Gródek n/Dunajcem
MatBlo
cały czas nad tym pracuje, więc proszę bez emocji snitch.gif a po drugie pełna nazwa to Gródek nad Dunajcem
thek
Miałem do czynienia z klientami i polem "Miejscowość", więc od razu Ci piszę, że z nim jest nieco problemów jeśli pozwolisz na za dużo. Jeśli mają być tylko polskie nazwy to najsensowniej jest przeznaczyć już z góry w bazie dwa pola na miejscowość i wyraźnie je rozgraniczyć w formularzu. Pierwsze pole obligatoryjne z nazwą samego miasta/wsi/osady, a drugie na ewentualne sąsiednie miasto. W ten sposób pieczesz 2 pieczenie na jednym ogniu:
- unikasz głupot w stylu "Coś koło czegoś" w najróżniejszych wariantach: "koło", "k/", "k.",
- tworzysz system miast sąsiednich, które mogą być wyświetlone jako "pomocnicze", gdy w dokładnych trafieniach wyszukiwarki brak wyników, ale też poniżej wyników jako pewne sugestie.

Co do tego, co powinno się znajdować w regułce: znaki literowe + spacja + myślnik. Jeśli planujesz mimo wszystko jedno pole, to jeszcze ukośnik i może kropki w skrótowcach ( jak powyższe k. ) ale decyzja zależy od Ciebie.

Co do wypowiedzi kapucha o zestawie [a-żA-Ż] w wyrażeniach regularnych to sam tę ciekawostkę na forum tutaj opisałem, ale nie wiem jakie wersje PHP taką składnię obsługują. Na bank są w wersji PHP 5.2.x, ale nie sprawdzałem wcześniejszych i nie mogę potwierdzić jak to działa, w każdym razie wiele edytorów wyrażeń regularnych ( standalone apps typu Regular Expression Editor) to wspiera.
MatBlo
Problem już wczoraj rozwiązałem, zastosowałem tylko jedno pole. Użyłem preg_match zamiast eregi, zdecydowałem, iż możliwe będzie używanie znaków literowych spacji i myślnika. Żadnych skrótowy w nazwie nie będzie można używać (poinformuje o tym odpowiedni komunikat). Dzięki za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.