MatBlo
17.10.2010, 11:26:16
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:
if (empty($miejscowosc)) { $error_miejscowosc = ' Wprowadź nazwę miejscowości.';
$err=true;
}
else if (!eregi ('^[a-zA-ZąęćżźńłóśĄĆĘŁŃÓŚŹŻ\s]+$', $_POST['miejscowosc'])) { $error_miejscowosc = ' Wprowadzono niewłaściwe znaki.';
$err=true;
}
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
17.10.2010, 14:27:27
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
MatBlo
17.10.2010, 14:29:51
To czego używać zamiast eregi?
kapuch
17.10.2010, 15:59:59
Np.
1. Czyli ogolnie PCRE ->
http://pl.php.net/manual/pl/ref.pcre.php2. Z tego co mi wiadomo, to nie musisz juz wypisywac wszystkich polskich znakow, tylko wystarczy taki przedzial [A-Ża-ż]
Crozin
17.10.2010, 16:12:59
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
17.10.2010, 16:18:19
cały czas nad tym pracuje, więc proszę bez emocji

a po drugie pełna nazwa to Gródek nad Dunajcem
thek
18.10.2010, 09:33:18
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
18.10.2010, 10:06:35
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.