Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP] kilka pytań o preg_match
!*!
post 17.09.2008, 10:43:16
Post #1





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Jeśli chciałbym aby w zmiennej były tylko litery i liczby to mam coś takiego:

  1. <?php
  2. if(preg_match("/[!@#$%^&*(){}-=+<>.~;\"'/[]|r\n,?“śŧ←↓→ţđ]/",$zmienna))
  3. ?>


Nie można tego jakoś uprościć?

Jak mogę użyć w zmeinnej tylko jednej spacji?

  1. <?php
  2. if(preg_match("/[s{1}]/",$zmienna)
  3. ?>


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
wookieb
post 17.09.2008, 10:57:35
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  1. <?php
  2. preg_match('/^[a-z0-9]* [a-z0-9]*$/i', $zmienna);
  3. ?>


A nie lepiej było najpierw poczytać o wyrazeniach regularnych?

Ten post edytował wookieb 17.09.2008, 11:00:56


--------------------
Go to the top of the page
+Quote Post
no_face
post 17.09.2008, 10:59:07
Post #3





Grupa: Zarejestrowani
Postów: 346
Pomógł: 23
Dołączył: 28.11.2004

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


Tylko litery i cyfry, jezeli chcesz polskie ogonki trzeba rowniez dodac.

  1. <?php
  2. preg_match("/[0-9A-Za-z]/",$zmienna);
  3. ?>


Jezeli jedna spacja to moze byc cos takiego

  1. <?php
  2. preg_match("/[0-9A-Za-z] [0-9A-Za-z]/",$zmienna);
  3. ?>
Go to the top of the page
+Quote Post
!*!
post 17.09.2008, 11:02:39
Post #4





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


wookieb - tylko mi nie pisz o manualu który opisuje tyle co nic.

no_face - właśnie z tą spacją jest problem, bo przyjmuje też:

Kod
zxc zxc zxc


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
wookieb
post 17.09.2008, 11:07:09
Post #5





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  1. <?php
  2. $zmienna=str_replace(' ','', $zmienna, $count);
  3. if($count==1 && preg_match('/^[a-z0-9]*$/i', $zmienna))
  4. {
  5.  
  6. }
  7. ?>


Czy ja coś mówiłem o manualu? google.pl -> Wyrażenia regularne

Ten post edytował wookieb 17.09.2008, 11:07:35


--------------------
Go to the top of the page
+Quote Post
!*!
post 17.09.2008, 11:12:06
Post #6





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


W większości proponują zmiany na eregi... poza tym nie chce usuwać spacji, tylko mieć możliwość użycia tylko jednej np. przy imieniu dwuczlownowym. A gdy ktoś wpisze wiecej niż jedną wyskoczy błąd.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
wookieb
post 17.09.2008, 11:14:30
Post #7





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




No to u góry podałem ci rozwiązanie na samej górze.
Cytat
wookieb - tylko mi nie pisz o manualu który opisuje tyle co nic.

Nic mówisz?

http://pl2.php.net/manual/pl/regexp.reference.php
http://pl2.php.net/manual/pl/reference.pcr...n.modifiers.php

Ten post edytował wookieb 17.09.2008, 11:19:22


--------------------
Go to the top of the page
+Quote Post
!*!
post 17.09.2008, 11:17:56
Post #8





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


to?
Kod
preg_match('/^[a-z0-9]* [a-z0-9]*$/i', $zmienna);


a gdzie jest w tym tylko jedna spacja? przejdzie przez to znacznie więcej. zdawalo mi się że ograniczyć to można w \s{1} tak?


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
wookieb
post 17.09.2008, 11:21:28
Post #9





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(!*! @ 17.09.2008, 12:17:56 ) *
to?
Kod
preg_match('/^[a-z0-9]* [a-z0-9]*$/i', $zmienna);


a gdzie jest w tym tylko jedna spacja? przejdzie przez to znacznie więcej.

np tutaj? 9]* [a
Zaznacz sobie. Sprawdź. Podziel się refleksjami.

Cytat(!*! @ 17.09.2008, 12:17:56 ) *
zdawalo mi się że ograniczyć to można w \s{1} tak?


Tyż ale to bierze pod uwage wszystkie "białe znaki"

Ten post edytował wookieb 17.09.2008, 11:22:51


--------------------
Go to the top of the page
+Quote Post
!*!
post 17.09.2008, 11:22:33
Post #10





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Kod
if(!preg_match('/^[a-z]* [a-z]*$/i',$imie)

lub
Kod
if(preg_match('/^[a-z]* [a-z]*$/i',$imie)


zastrzel... przejdzie więcej jak nic... o0

Ten post edytował !*! 17.09.2008, 11:24:01


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
wookieb
post 17.09.2008, 11:27:58
Post #11





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A może byś jednak kurwa sprawdził? Sprawdziłem. Działa. Wiec najpierw zrób a potem "dziel sie refleksjami"
Kod
if(preg_match('/^[a-z0-9]* [a-z0-9]*$/i', '  test eheh   '))
{
echo 'kest';
}

Nie działa
Kod
if(preg_match('/^[a-z0-9]* [a-z0-9]*$/i', 'test eheh'))
{
echo 'kest';
}

A jednak działa... Zamien jeszcze * na + w celu sprawdzenia czy wpisał 2 człony
Cytat
zastrzel...

Z przyjemnością.

Ten post edytował wookieb 17.09.2008, 11:33:43


--------------------
Go to the top of the page
+Quote Post
drPayton
post 17.09.2008, 11:29:07
Post #12





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Albo tak:
  1. <?php
  2. preg_match('/^[a-z0-9]{0,}[:spac:]]{1,1}[a-z0-9]{0,}$/i', $stringToValidate)
  3. ?>


[[:space:]] tam powinno być, ale forum zjada literki :/

Ten post edytował drPayton 17.09.2008, 11:30:04
Go to the top of the page
+Quote Post
bliitz
post 17.09.2008, 11:29:30
Post #13





Grupa: Zarejestrowani
Postów: 155
Pomógł: 12
Dołączył: 5.04.2008

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


Cytat(!*! @ 17.09.2008, 12:12:06 ) *
W większości proponują zmiany na eregi... poza tym nie chce usuwać spacji, tylko mieć możliwość użycia tylko jednej np. przy imieniu dwuczlownowym. A gdy ktoś wpisze wiecej niż jedną wyskoczy błąd.


http://pornel.net/ereg


--------------------
Go to the top of the page
+Quote Post
no_face
post 17.09.2008, 11:34:47
Post #14





Grupa: Zarejestrowani
Postów: 346
Pomógł: 23
Dołączył: 28.11.2004

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


Wybacz, troche sie pospieszylem, tutaj masz kod ktory przepusci tylko ciagi jedno lub dwu wyrazowe, czyli usera z jednym imieniem lub dwoma:

  1. <?php
  2. preg_match("/^[A-Za-z]+ [A-Za-z]+$|^[A-Za-z]+$/",$imie);
  3. ?>


Jezeli to beda userzy z polski nalezaloby dodac jeszcze polskie egonki do znakow akceptowanych:

Kod
[A-Za-zążśźćęńół]


Ten post edytował no_face 17.09.2008, 11:36:53
Go to the top of the page
+Quote Post
!*!
post 17.09.2008, 11:40:02
Post #15





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


wookieb - sorawdzałem, i Twoje przykłady nie działają (prawdopodobnie z mojej bardzo niskiej niewiedzy wstawiania kodu/ironia).
bliitz - tak wiem o tym, myślisz że czemu uparłem się na pregi?
no_face - dzięki, właśnie o to chodziło. Dla innych co szukają:

  1. <?php
  2. if(!preg_match("/^[A-Za-z]+ [A-Za-z]+$|^[A-Za-z]+$/", $imie)){$error = "<span class='error'>Za dużo spacji.</span>";}
  3. ?>


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
drPayton
post 17.09.2008, 11:50:56
Post #16





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Cytat(!*! @ 17.09.2008, 12:40:02 ) *
wookieb - sorawdzałem, i Twoje przykłady nie działają (prawdopodobnie z mojej bardzo niskiej niewiedzy wstawiania kodu/ironia).


Najwyraźniej, bo jak dla mnie to jego przykład działa jak należy...
Go to the top of the page
+Quote Post
unloco
post 23.03.2011, 12:06:14
Post #17





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 13.04.2010

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


Mogę prosić o poradę co się nie zgadza?

  1.  
  2. if (!preg_match("/[a-zA-Z0-9]{3,}{,30}/", $login_uzytkownika))
  3. {
  4. echo "<div class=error>";
  5. echo "Login może składać się tylko z:<br>- dużych i małych liter (bez polskich znaków)<br>- cyfr<br>- nie może być dłuższy niż 30 znaków i krótszy niż 3<br>- musi się zaczynać od litery<br>";
  6. echo "</div>";
  7. $nie_rejestruj_usera = 1;
  8. }
  9.  


Cały czas gdy wpisuję jako login wyraz Unloco2222 to pojawia mi się ten komunikat co powyżej.
Go to the top of the page
+Quote Post
drPayton
post 23.03.2011, 12:33:18
Post #18





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


o, Pan archeolog biggrin.gif

Cytat
"/[a-zA-Z0-9]{3,}{,30}/"

zamień na
Cytat
"/[a-zA-Z0-9]{3,30}/"


reszta jest ok wink.gif

Ograniczenie długości dajesz jedno, albo tylko z minimalną {X,}, albo tylko z maksymalną {,X}, albo oba naraz {X,Y}.
Go to the top of the page
+Quote Post
unloco
post 27.03.2011, 12:50:11
Post #19





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 13.04.2010

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


Mogę jeszcze prosić o skrócenie tego? Bo nigdzie nie mogę znaleźć jak narazie odpowiedzi:

  1. if (!preg_match("/[a-zA-Z0-9]{3,30}/", $login_uzytkownika))
  2. {
  3. echo "<div class=error>";
  4. echo "Login może składać się tylko z:<br>- dużych i małych liter (bez polskich znaków)<br>- cyfr<br>- nie może być dłuższy niż 30 znaków i krótszy niż 3<br>- musi się zaczynać od litery<br>";
  5. echo "</div>";
  6. echo "<br>"; $nie_rejestruj = 1;
  7. }
  8.  
  9. if (preg_match("/[ąśżźćęńłóĄŚŻŹĆŃŁÓ]{3,30}/u", $login_uzytkownika))
  10. {
  11. echo "<div class=error>";
  12. echo "Login może składać się tylko z:<br>- dużych i małych liter (BEZ POLSKICH ZNAKÓW)<br>- cyfr<br>- nie może być dłuższy niż 30 znaków i krótszy niż 3<br>- musi się zaczynać od litery<br>";
  13. echo "</div>";
  14. echo "<br>"; $nie_rejestruj = 1;
  15. }


Żeby zastosować jedno wyrażenie warunkowe to jak trzeba kod zmienić? Bo jeśli jako login ktoś wpisze np. Śliczna to i tak to jest akceptowane. A chodzi o to, żeby nie było. Nawet jeśli usunę drugie wyrażenie warunkowe to i tak polskie litery są akceptowane. Proszę o pomoc.
Go to the top of the page
+Quote Post
drPayton
post 27.03.2011, 13:25:21
Post #20





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


oj, wprowadziłem Cię niechcący w błąd pisząc, że jest ok - jeden poważny problem tam wystepuje wink.gif
preg_match w postaci takiej, jak zapisałeś w praktyce oznacza, że sprawdzane jest, czy w ciągu znaków (tu: login użytkownika) jest co najmniej 3-literowy fragment zgodny z podanym wzorcem.
W podanym przez Ciebie przykładzie - "Śliczna" - występuje taki 6-literowy ciąg "liczna".
Ty chcesz sprawdzić, czy cały ciąg jest zgodny ze wzorcem, a więc musisz do wyrażenia regularnego dodać informację o tym, iż sprawdzany musi być cały string - od początku do końca. Należy więc zamknąć go pomiędzy znakami początku i końca "matchowania" ^ oraz $

Po zmianie:
  1. if (!preg_match("/^[a-zA-Z0-9]{3,30}$/", $login_uzytkownika)) (...)

i powinno być już (tym razem wink.gif) wszystko jak należy - drugi IF nie jest już potrzebny
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 13.07.2025 - 02:08