Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Preg_match - zle/dziwne dzialanie
Forum PHP.pl > Forum > Przedszkole
kaźmirz
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. }
Ulysess
  1. if( preg_match('/^([a-z 0-9]+)$/i', $login) ){
  2. echo "OK";
  3. }else{
  4. echo "ZLE";
  5. }

kaźmirz
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?
Valdi_B
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
kaźmirz
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.
Valdi_B
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.
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.