Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [inne][PHP]Prośba o pomoc w wyrażeniu regularnym
mysz0n
post 4.12.2014, 15:56:13
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 16.08.2006
Skąd: szy-ły

Ostrzeżenie: (0%)
-----


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.

Ten post edytował mysz0n 4.12.2014, 15:58:03
Go to the top of the page
+Quote Post
aniolekx
post 4.12.2014, 16:25:20
Post #2





Grupa: Zarejestrowani
Postów: 340
Pomógł: 46
Dołączył: 31.07.2009
Skąd: A

Ostrzeżenie: (0%)
-----


  1. preg_match("/^ID(\d){5}[\D]*$/", $symbol)


Ten post edytował aniolekx 4.12.2014, 16:26:13
Go to the top of the page
+Quote Post
mysz0n
post 4.12.2014, 17:03:03
Post #3





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 16.08.2006
Skąd: szy-ły

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
aniolekx
post 4.12.2014, 17:06:05
Post #4





Grupa: Zarejestrowani
Postów: 340
Pomógł: 46
Dołączył: 31.07.2009
Skąd: A

Ostrzeżenie: (0%)
-----


Czy mam je rozpisać?
Go to the top of the page
+Quote Post
mysz0n
post 4.12.2014, 22:51:22
Post #5





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 16.08.2006
Skąd: szy-ły

Ostrzeżenie: (0%)
-----


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.

Ten post edytował mysz0n 4.12.2014, 22:59:55
Go to the top of the page
+Quote Post
aniolekx
post 4.12.2014, 23:47:08
Post #6





Grupa: Zarejestrowani
Postów: 340
Pomógł: 46
Dołączył: 31.07.2009
Skąd: A

Ostrzeżenie: (0%)
-----


  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,
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.04.2024 - 19:00