Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne][PHP]Prośba o pomoc w wyrażeniu regularnym
Forum PHP.pl > Forum > Przedszkole
mysz0n
Mam do wyciągnięcia z bazy posklejane dane klienta, dane są w formacie
ID09876Jan_Kowalski
ID56789_Stanislaw_Nowak
Maciej_Nowicki
itd.
generalnie chodzi o to, że nie wszytskie wiersze mają ID w takim formacie jak bym chciał, chce wyłapać te które mają już ładnie dodane ID.
Format jakiego szukam to Litera I po niej D i 5 cyfr następnie dowolny tekst
Próbowałem:

  1. $symbol = 'ID12345';
  2. if (preg_match("[I][D]\d\d\d\d\d", $symbol)){
  3. echo "mam go!!!";
  4. }else{
  5. echo "nie mam:(";
  6. }


ale nic mi nie znajduje. Sprawdzałem na http://www.regexr.com/ i regex101.com i pokazuje mi, że powinno być ok.
Zakładam, że problem leży w jakiejś spacji czy czymś innym drobnym, ale nie mam już pomysłów.
aniolekx
  1. preg_match("/^ID(\d){5}[\D]*$/", $symbol)
mysz0n
wielkie dzięki! działa, ale nie mam pojęcia jak składa się te wyrażenia. Kilka razy siadałem do tego, aby się nauczyć i jakoś ciagle nie mogę ogarnąć sad.gif
aniolekx
Czy mam je rozpisać?
mysz0n
Poczytałem sobie i wychodzi tak:
/^ID(\d){5}[\D]*$/
/^ - start lini i jakikolwiek znak?
ID - litery ID
(\d) cyfry
{5} - 5 razy to co napisałeś poprzednio - czyli 5 cyfr
[\D] - jakakolwiek litera?
*$/ - koniec wyrażenia?

i pytanie, w adresach mam litery ale też numery domów i znaki w stylu "_", "-" co musiałbym dać zamiast [\D] zeby złapało mi te wyniki i uznało za poprawne?
Próbowałem podmienić na [A-Za-z0-9_] ale też nie łapie, chodzi o to, że po tych 5 cyfrach może być cokolwiek, generalnie jak zobaczy ID i 5 cyfr ma uznać true


po dalszych testach wyszło mi takie coś:

if (preg_match("/^ID(\d){5}(.)*$/", $symbol))


niby sprawdza to co ma i zwraca true kiedy chce, ale czy to dobre rozwiązanie? nie bardzo lubie pisac kod którego nie do końca rozumiem, więc byłbym wdzięczny za potwierdzenie że w dobrą strone poszedłem.
aniolekx
  1. if (preg_match("/^ID\d{5}\w*$/", $symbol))


\w - zlapie tylko cyfry, litery i podkreslenie, nie zlapie np ukosnika, kropki, spacji itp
. - kropka lapie wszystko oprocz znaku nowej linii
\D - przeciwienstwo \d - czyli lapie wszystko co nie jest cyfra

opuscilem nawiasy bo w zasadzie w tym przypadku sa zbedne,
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.