Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kłopot z ereg [spacja]
Forum PHP.pl > Forum > PHP
dareckiphp
Pomóżcie napisać mi eregi, gdzie waliduję nazwisko:
Napisałem tak:
  1. <?php
  2. if (eregi ('^[a-zęóąśłżźćń ]+$', $imie)){...}
  3. ?>

Musiałem dodać spację, ponieważ zawsze może być imie, np. Jan Maria....
Ale problem w tym, że user może wpisać tylko spację i to też zostanie zaakceptowane. Jak napisać walidację, żeby akceptowany był ten ciąg znaków, ale żeby na początku nie mogła pojawić się spacja lub jej wielokrotność.
dzięki
Dabroz
  1. <?php
  2. if (eregi ('^[a-zęóąśłżźćń][a-zęóąśłżźćń ]+$', $imie)){...}
  3. ?>
Yarecki
Skożystaj z funkcji trim, która usuwa białe znaki z początku i końca łańcucha. Poźniej przepuść taki łańcuch przez swój eregi.
FiDO
  1. <?php
  2.  
  3. if (preg_match('#^[a-zążśźęćńół]+( [a-zążśźęćńół]+)?$#i', $imie) { ... }
  4. // lub tak (to jest to samo, tylko inaczej)
  5. if (preg_match('#^[^W_0-9]+( [^W_0-9]+)?$#i', $imie) { ... }
  6.  
  7. ?>
dareckiphp
Wielkie dzięki, podpowiedź FiDO działa, ale mam prośbę o rozszyfrowanie początku i końca tego cuda, bo nic nie dało przeglądanie manuala, a i książka dała za wygraną:
- co oznacza znak "#" na początku
- znak + wewnątrz nawiasu ()
- no i wyrażenie ?$#i

Dzięki wielkie i sorry za upierdliwość, ale lubie wiedzieć co wypisują w skryptach.
FiDO
Cytat
- co oznacza znak "#" na początku

To jest ogranicznik wyrazenia regularnego. W wyrazeniach w formacie PCRE, czyli wszystkich ktorych uzywa sie w funkcjach preg_* sa zapisywane w postaci #wyrazenie#flagi
Znak ten moze byc prawie, ze dowolny, wiekszosci stosuje / (/wyrazenie/), mi sie spodobal akurat # smile.gif
Cytat
- znak + wewnątrz nawiasu ()

Znak + odnosi sie do poprzedniego elementu, ktorym jest klasa znaków [...] i oznacza, ze ten poprzedni element (w tym przypadku litera) musi wystapic co najmniej raz (no bo pustych imion nie uwzgledniamy).
Cytat
- no i wyrażenie ?$#i

Znak zapytania tyczy się nawiasu (bo wlasnie po nim sie znajduje) i znaczy on mniej wiecej tyle, ze to co jest w tym nawiasie jest opcjonalne, tzn moze wystapic ale nie musi (to jest drugie imie, ktore jak wiadomo nie musi wystapic, ale moze)
Dalej jadac mamy dolara, ktory znaczy ze w tym miejscu musi wystapic koniec stringa, czyli po imieniu (jednym lub dwoch) nie moze juz byc nic, nawet spacji.
Potem jest znowu # co znaczy, ze w tym miejscu konczy sie wyrazenie i dalej sa juz tylko flagi. Flaga i ustawia tryb case-insensitive, czyli taki, ze wielkosc liter nie ma znaczenia.
Cytat
Dzięki wielkie i sorry za upierdliwość, ale lubie wiedzieć co wypisują w skryptach.

Balem sie, ze nie zapytasz..
Bardzo dobrze, ze lubisz wiedziec, za to masz plusa smile.gif
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.