[+] [PHP] wyrażenia regularne

Potrzebujesz pomocy z C, C++, perl, python, itp.
Awatar użytkownika
ruun
Member
Posty: 1366
Rejestracja: 29 marca 2007, 21:07
Lokalizacja: Kruszwica

[+] [PHP] wyraŻenia regularne

Post 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.
gönx
Posty: 10
Rejestracja: 18 marca 2008, 21:59

Post 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
genobis
Beginner
Posty: 353
Rejestracja: 21 lipca 2008, 21:59
Lokalizacja: Trzebinia

Post 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]+$";
Awatar użytkownika
ruun
Member
Posty: 1366
Rejestracja: 29 marca 2007, 21:07
Lokalizacja: Kruszwica

Post autor: ruun »

Miałem błąd w innym miejscu skryptu. Teraz wszystko działa, dzięki.
ODPOWIEDZ