Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Przepuszaczanie tylko liter i cyfr
Forum PHP.pl > Forum > Przedszkole
Lirdoner
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
nospor
zapomniałeś o plus (+) mówiącym, że tych znaków może być więcej niż jeden
wNogachSpisz
Do tego służy funkcja ctype_alnum
abort
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.
wNogachSpisz
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ę.
elektrrrus
Niesety wsparcie unicode lezy i kwiczy w php, najbardziej to widać w regexach. + na konto pythona.
wNogachSpisz
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.
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.