Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Przepuszaczanie tylko liter i cyfr, Wyrażenie regularne
Lirdoner
post 8.11.2011, 15:19:20
Post #1





Grupa: Zarejestrowani
Postów: 500
Pomógł: 1
Dołączył: 29.09.2009

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


Witam, chcę przepuszczać tylko dane zaiwerające litery i cyfry zastosowałem funkcję preg_match ale z zapewne błędnym patternem
Może ktoś popatrzeć i powiedzieć mi co jest źle (zwraca false cały czas)
  1. preg_match('/^([0-9a-zA-Z])$/',$_POST['login'])


//edit
nospor, dzięki wink.gif


Ten post edytował Lirdoner 8.11.2011, 15:27:14
Go to the top of the page
+Quote Post
nospor
post 8.11.2011, 15:22:07
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




zapomniałeś o plus (+) mówiącym, że tych znaków może być więcej niż jeden


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wNogachSpisz
post 8.11.2011, 15:32:14
Post #3





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Do tego służy funkcja ctype_alnum

Ten post edytował wNogachSpisz 8.11.2011, 15:32:32
Go to the top of the page
+Quote Post
abort
post 8.11.2011, 23:12:25
Post #4





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

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


wNogachSpisz: w zasadzie masz rację. Problem może pojawić się przy znakach narodowych. Popraw mnie, jeśli się mylę, ale... ctype_alnum ich nie uwzględni nawet przy ustawieniu locale (nie miałem okazji użyć tej funkcji nigdy), manual mówi tylko o stosowaniu jej przy "standard C locale". W takim układzie ctype_alnum wymięka na rzecz wyrażeń regularnych. Na plus dla ctype_alnum można powiedzieć tylko jedno: jest dużo szybsza od preg_match (circa 3 razy). Na minus - znaki narodowe (choć powtórzę to jeszcze raz: to moje domniemanie).

Co do pierwszego pytania: oryginalnie zapisane wyrażenie '/^([0-9a-zA-Z])$/' można zoptymalizować. Oprócz poprawek, które zaproponował nospor (by to w ogóle działało), można to zapisać bez okrągłych nawiasów - wydaje mi się (i to bardzo), że są tu niepotrzebne. Okrągłe nawiasy to znak grupowania (subpatterns): http://pl.php.net/manual/en/regexp.reference.subpatterns.php - tu wynik nigdzie nie jest używany, więc grupowanie nie jest potrzebne.

Ten post edytował abort 8.11.2011, 23:13:13
Go to the top of the page
+Quote Post
wNogachSpisz
post 8.11.2011, 23:36:22
Post #5





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Cytat(abort @ 8.11.2011, 23:12:25 ) *
Problem może pojawić się przy znakach narodowych. (...) ctype_alnum ich nie uwzględni nawet przy ustawieniu locale

Zarówno zaprezentowane powyżej wyrażenie regularne jak i ctype_alnum() NIE uwzględnia znaków narodowych, co jak rozumiem jest zachowaniem przez autora topicu pożądanym.
Nie widzę problemu.

Jeśli chcesz "łykać" wszystkie "literki", to nie zapominaj że istnieje też język chiński, japoński, koreański, nie tylko polski ze swoimi śćółęążźć... O kodowaniu nie wspomnę.

Ten post edytował wNogachSpisz 8.11.2011, 23:39:12
Go to the top of the page
+Quote Post
elektrrrus
post 8.11.2011, 23:44:26
Post #6





Grupa: Zarejestrowani
Postów: 175
Pomógł: 18
Dołączył: 11.06.2007
Skąd: Koszalin/Poznań

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


Niesety wsparcie unicode lezy i kwiczy w php, najbardziej to widać w regexach. + na konto pythona.
Go to the top of the page
+Quote Post
wNogachSpisz
post 8.11.2011, 23:47:55
Post #7





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Są funkcje mb_*, więc po co natywne wsparcie dla multibyte stringów, tylko by przeszkadzało.
Wiem że zdania na ten temat są podzielone.
Mi to pasuje.
PHP to język dla początkujących.

Ten post edytował wNogachSpisz 8.11.2011, 23:50:55
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: 14.08.2025 - 13:22