![]() |
![]() ![]() |
![]() |
![]()
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) //edit nospor, dzięki ![]() Ten post edytował Lirdoner 8.11.2011, 15:27:14 |
|
|
![]()
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 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
|
|
|
![]()
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 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
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 |
|
|
![]()
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.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
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 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 13:22 |