Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tylko standardowe znaki
Forum PHP.pl > Forum > PHP
szczawik
Pisze funkcję rejestracji użytkowników. Niestety jak to polscy internauci lubi± się wyróżniać z tłumu i umieszczaj± w swoich nickach różnego rodzaju znaki. Jakie¶ krzyżyki, litery do góry nogami itp. Jak zrobić, aby rejestracja powiodła się dopiero wtedy gdy użytkownik poda nick składaj±cy się wył±cznie z liter z przedziału od A do Ż?
nospor
Wyrażenie regularne
http://www.php.net/manual/en/function.preg-match.php
szczawik
Poczytałem w manualu i zrobiłem tak:

  1.  
  2. if(preg_match('/^[a-zA-Z±ćęłńó¶ĽżˇĆĘŁŃÓ¦¬Ż0-9]{3,15}$/i', $nick))
  3. {
  4. echo 'Prawidłowy login';
  5. }
  6. else
  7. {
  8. echo 'Nieprawidłowy login!';
  9. }


Ogólnie działa, ale problem gdy nazwa loginu jest dwuczłonowa, lub więcej - wtedy zawsze wy¶wietla else.
Jak na to zaradzić?
CuteOne
A widziałe¶ na jakiej¶ stronie aby pozwalano na wieloczłonowy login ? No chyba, że chcesz mieć na swojej stronie login typu " " (tu jest 10 spacji ale forum skraca do jednej tongue.gif) smile.gif
szczawik
Na wielu stronach login składa się z kilku wyrazów. Ale to co mi udało się stworzyć, niestety zawsze zwraca else (w przypadku dodania spacji) smile.gif
by_ikar
Różne jest zdanie i podej¶cie na temat loginów, moje jest takie że tylko i wył±cznie znaki alfanumeryczne, plus małpa, my¶lnik i podkre¶lnik. Czyli wyrażenie wygl±dałoby mniej więcej tak:

Kod
/^[\w@-]{3,15}$/i


W twoim przypadku żeby pozwolić przykładowo tylko na jedn± spacje między poszczególnymi członami, twoje wyrażenie byłoby mniej więcej takie:

Kod
/^([\w-@±ćęłńó¶ĽżˇĆĘŁŃÓ¦¬Ż]([\s]{1})?){3,15}$/is



SprawdĽ czy zadziała, bo nawet tego nie testowałem.

PS. jeżeli dajesz flagę "i", wówczas nie musisz pisać a-zA-Z.
szczawik
wła¶nie o to chodziło, dzięki wielkie by_ikar smile.gif
Co prawda jest możliwo¶ć wstawienia więcej spacji, ale z tym sobie poradzę.
by_ikar
I w sumie to byłby problem, bo nie wiem czy jest sposób aby jako¶ to inaczej ugryĽć. Tutaj masz tylko z 1 spacj±, dwa wyrazy, problem polega na tym, że jeżeli pierwszy będzie miał 15 znaków, to drugi może mieć maksymalnie 11 znaków (3 minimalne znaki dla wyrazu plus spacja, odj±ć od maksymalnie 15), czyli ł±cznie jeżeli kto¶ będzie miał 2 wyrazy, to może mieć 15+11 znaków... Nie przychodzi mi do głowy nic innego, ale jeżeli i to ci pomoże, to wyrażenie wygl±dałoby mniej więcej tak:

Kod
/^([\w-@±ćęłńó¶ĽżˇĆĘŁŃÓ¦¬Ż]{3,15})(\s[\w-@±ćęłńó¶ĽżˇĆĘŁŃÓ¦¬Ż]{3,15})?$/is


Pewnie można to jako¶ ogarn±ć jakim¶ warunkiem, ale teraz lecę na obiad, więc nawet nie chcę o tym my¶leć tongue.gif
szczawik
Przeniosłem się na ovh i mam wrażenie, że więcej błędów wykrywa tongue.gif

  1. $slowa = array('text','text');
  2.  
  3. foreach($slowa as $slowo)
  4. {
  5. if(preg_match("/".$slowo."/", $message)) { $badword = true; }
  6. }


Co jest Ľle w tym kawałku kodu?
Wy¶wietla mi
Warning: preg_match() [<a href='function.preg-match'>function.preg-match</a>]: Unknown modifier 'j' in ....
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.