Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Tylko standardowe znaki
szczawik
post 16.08.2011, 18:36:03
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 19.08.2010

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


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 Ż?
Go to the top of the page
+Quote Post
nospor
post 16.08.2011, 18:37:08
Post #2





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




Wyrażenie regularne
http://www.php.net/manual/en/function.preg-match.php


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

"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
szczawik
post 18.08.2011, 18:28:34
Post #3





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 19.08.2010

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


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ć?
Go to the top of the page
+Quote Post
CuteOne
post 18.08.2011, 20:33:51
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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

Ten post edytował CuteOne 18.08.2011, 20:34:48
Go to the top of the page
+Quote Post
szczawik
post 19.08.2011, 13:22:40
Post #5





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 19.08.2010

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


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
Go to the top of the page
+Quote Post
by_ikar
post 19.08.2011, 13:41:05
Post #6





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


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.
Go to the top of the page
+Quote Post
szczawik
post 19.08.2011, 13:56:24
Post #7





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 19.08.2010

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


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ę.
Go to the top of the page
+Quote Post
by_ikar
post 19.08.2011, 14:55:38
Post #8





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


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
Go to the top of the page
+Quote Post
szczawik
post 20.08.2011, 07:36:57
Post #9





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 19.08.2010

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


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 ....
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.07.2025 - 17:11