Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Preg_match - zle/dziwne dzialanie
kaźmirz
post 5.03.2011, 12:03:39
Post #1





Grupa: Zarejestrowani
Postów: 103
Pomógł: 2
Dołączył: 6.07.2010

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


Witam
Mam problem z wyrazeniem regularnym, ktory ma za zadanie przepuszczac tylko same litery i cyfry, a przepuszcza dodatkowo znak "^" i "_", czym jest to spowodowane i jak to wykluczyc?
Moje wyrazenie/skrypt:
  1. if( preg_match("/^[A-ż0-9]{3,20}$/", $login) ){
  2. echo "OK";
  3. }else{
  4. echo "ZLE";
  5. }
Go to the top of the page
+Quote Post
Ulysess
post 5.03.2011, 12:07:23
Post #2





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


  1. if( preg_match('/^([a-z 0-9]+)$/i', $login) ){
  2. echo "OK";
  3. }else{
  4. echo "ZLE";
  5. }

Go to the top of the page
+Quote Post
kaźmirz
post 5.03.2011, 12:16:41
Post #3





Grupa: Zarejestrowani
Postów: 103
Pomógł: 2
Dołączył: 6.07.2010

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


Tak, tyle że przy Twoim zapisie, brak polskich znakow, jest spacja (ktorej nie chce), no i musi zostac {3,20} bo na taki przedzial zezwalam.
Rozumiem, ze po przerobce powinno wygladac to tak:
  1. /^([a-ż0-9]{3,20})$/i

rozumiem, ze modyfikator "i" ignoruje wielkosc liter, ale czy to wyeliminuje mi znaki "^" i "_" questionmark.gif?

Ok sprawdzilem ten Twoj ereg, ktory lekko przerobilem i wyglada na to ze dziala prawidlowo.
Tylko jesli ktos moglby mi wytlumaczyc, czemu przy moim zapisie przechodzily te znaki, a teraz jest ok?
Przyda sie na przyszlosc wink.gif
Chodzi o nawiasy, czy modyfikator?
Go to the top of the page
+Quote Post
Valdi_B
post 5.03.2011, 12:32:13
Post #4





Grupa: Zarejestrowani
Postów: 107
Pomógł: 30
Dołączył: 19.02.2011
Skąd: Warszawa

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


Przedtem miałeś [A-ż...] a więc m.in.wszystkie znaki od "A" do "ż".
Popatrz na tabelę kodów UTF-8: http://en.wikipedia.org/wiki/UTF-8
Pomiędzy "Z" i "a" masz np. [, \, ], ^, _ i ` (tyldę).
Wszystkie te znaki powinny być akceptowane w pierwotnej redakcji.

Po "z" też jest w kodzie trochę innych znaków niż polskie narodowe (zanim dojdziesz do "ż").

Inny wariant rozwiązania to tzw. cechy znaków.
Poczytaj: http://pl.php.net/manual/pl/regexp.reference.unicode.php
Go to the top of the page
+Quote Post
kaźmirz
post 5.03.2011, 12:40:54
Post #5





Grupa: Zarejestrowani
Postów: 103
Pomógł: 2
Dołączył: 6.07.2010

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


Dzieki, teraz m/w wiem w czym tkwil problem.
Czyli poprzedni zapis, tez moze przepuscic mi jakies znaki, wiec chyba najrozsadniej bedzie wypisac je "recznie":
  1. /^[0-9a-ząśżźćńłóę]{3,20}$/i

Mam nadzieje, ze modyfikator "i" dziala poprawnie na polskich ogonkach wink.gif
Ten zwykly nawias tez chyba nie jest juz potrzebny :/

EDIT:
A tak sobie pomyslalem teraz, czy nie wystarczylo by uzyc \w\d, czyli word i digit ?
Czy wtedy moge liczyc na to, ze bede mogl wpisac tylko litery (lacznie z polskimi) i cyfry?
  1. /^[\w\d]{3,20}$/i

Sorrki za te pytania, ale dopiero staram sie pojac wyrazenia reg.

Ten post edytował kaźmirz 5.03.2011, 12:47:50
Go to the top of the page
+Quote Post
Valdi_B
post 5.03.2011, 13:55:24
Post #6





Grupa: Zarejestrowani
Postów: 107
Pomógł: 30
Dołączył: 19.02.2011
Skąd: Warszawa

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


O ile pamiętam, "\w" puści także "_".

"Ten zwykly nawias" - to jak rozumiem zwykłe nawiasy okalające wyrażenie regułowe.
Stosuje się je do przechwytywania fragmentu tekstu pokrytego danym fragmentem wyrażenia regułowego.
U Ciebie raczej niepotrzebne.

Ten post edytował Valdi_B 5.03.2011, 13:58:32
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.06.2025 - 22:07