Strona 1 z 1

[+] [PHP] wyraŻenia regularne

: 20 października 2008, 08:54
autor: ruun
Jak sprawdzić czy ciąg znaków jesst w postaci: 123-abcdefghijk ?

Ciąg musi zaczynać sie od trzycyfrowego numeru, kolejnym znakiem musi być myślnik, reszta to dowolnej długości ciąg składający się z małych liter a-z (bez polskich znaków).

Próbowałem tak:

Kod: Zaznacz cały

$wzorzec = '[0-9]{3}-[a-z]*';
if(ereg($wzorzec, $nazwa)) $wynik = 'Pasuje';
ale nie działa.

: 20 października 2008, 09:48
autor: gönx

Kod: Zaznacz cały

$wzorzec = "^[0-9]{3}-[a-z]{1,}$";
{1,} ma za zadanie powtórzyć jakąś literkę przynajmniej raz, gdyby była tam gwiazka (*), to skrypt nie działałby perfekcyjnie, ponieważ można byłoby wpisać "997-" i skrypt zaakceptowałby to. Jeśli natomiast damy {1,}, to użytkownik musi wpisać przynajmniej jedną literkę, dzięki temu fraza "997-" nie będzie pasowała już do wzorca.

gönx

: 20 października 2008, 10:27
autor: genobis
A co Ci nie działa? Jest OK, z dokładnością do tego, na co zwrócił uwagę gönx. Jednak wyrażenie jako takie powinno być w porządku.

Chociaż oczywiście użycie {1,} jest poprawne, to prościej (a co prostsze, to lepsze ;-)) jest użyć po prostu symbolu +, który - w przeciwieństwie do * oznaczającej dowolną ilość powtórzeń - oznacza jedno lub więcej powtórzeń.

Czyli:

Kod: Zaznacz cały

$wzorzec = "^[0-9]{3}-[a-z]+$";

: 20 października 2008, 10:46
autor: ruun
Miałem błąd w innym miejscu skryptu. Teraz wszystko działa, dzięki.