Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z wyrazeniem regularmym, dwa minusy
Forum PHP.pl > Forum > PHP
kufalo
Mam pewniem maly roblem z wyrazeniem regularnym. Doszedlem do pewnego etapu ale pewna rzecz nie dziala jak bym chcial. Zalozenia:

1) Ciag ma sie skladac ze znakow nie innych niz [\da-z.-]
2) Na poczatku i na koncu nie moze byc kropki ani minusa,
3) dwie kropki nie moga wystepowac kolo siebie,
4) minus i kropka nie moga wystepowac kolo siebie.

Napisalem cos takiego:
Kod
#^[\da-z]([.-]?[\da-z])*$#


... dziala prawie dobrze, ale niestety zablokowalem mozliwosc dwoch minusow kolo siebie. Jak to rozwiazac?
cojack
Kod
cojack@cojack-laptop:~$ php -r '$a = ".-ab..cefgh-."; if(preg_match("/^(?:[.-])|([.]{1})|(\d)|(?:[.-])$/",$a)) echo "blad\n"; else echo "ok\n";'
blad
cojack@cojack-laptop:~$ php -r '$a = "-ab..cefgh."; if(preg_match("/^(?:[.-])|([.]{1})|(\d)|(?:[.-])$/",$a)) echo "blad\n"; else echo "ok\n";'
blad
cojack@cojack-laptop:~$ php -r '$a = ".ab..cefgh-"; if(preg_match("/^(?:[.-])|([.]{1})|(\d)|(?:[.-])$/",$a)) echo "blad\n"; else echo "ok\n";'
blad
cojack@cojack-laptop:~$ php -r '$a = "ab..cefgh-"; if(preg_match("/^(?:[.-])|([.]{1})|(\d)|(?:[.-])$/",$a)) echo "blad\n"; else echo "ok\n";'
blad
cojack@cojack-laptop:~$ php -r '$a = ".ab..cefgh"; if(preg_match("/^(?:[.-])|([.]{1})|(\d)|(?:[.-])$/",$a)) echo "blad\n"; else echo "ok\n";'
blad
cojack@cojack-laptop:~$ php -r '$a = ".abcefgh"; if(preg_match("/^(?:[.-])|([.]{1})|(\d)|(?:[.-])$/",$a)) echo "blad\n"; else echo "ok\n";'
blad
cojack@cojack-laptop:~$ php -r '$a = "abcefgh"; if(preg_match("/^(?:[.-])|([.]{1})|(\d)|(?:[.-])$/",$a)) echo "blad\n"; else echo "ok\n";'
ok


  1. preg_match("/^(?:[.-])|([.]{1})|(\d)|(?:[.-])$/",$a)
zegarek84
Kod
/^(?![\.-])(:?[\da-z\.-](?!\.\-|\-\.|\.\.))*[\da-z]$/
kufalo
wielkie dzieki - o to mi chodzilo smile.gif
cojack
A że się tak spytam co w moim jest nie tak?
zegarek84
nie testowałem ale jak na szybko patrzę i założenie tego co napisałeś (szukałeś niedozwolonych znaków) to choć jest prawidłowe "A.B" to w powyższym przypadku raczej się nie sprawdzi....

wewnątrz jedna kropka miała być dozwolona - dopiero 2 i więcej nie - a i nie sprawdzałem ale patrząc na logikę to wykluczyłeś też cyfry??
Kod
[grzesiek@localhost ~]$ php -r '$a = "abc4efgh"; if(preg_match("/^(?:[.-])|([.]{1})|(\d)|(?:[.-])$/",$a)) echo "blad\n"; else echo "ok\n";'
blad
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.