• 11 odgovora
  • 5.175 pregleda
PHP i regex 13.11.2002. u 15:39 · pre 291 meseci #1
Treba proveriti ispravnost korisnickog imena u PHP-u. Za ovo koristim sledeci regular expression:

^[A-z0-9_]*$

Znaci dopustam alfanumericke znake i underscore. Pitanje je sledece: kako dopustiti i tacku u imenu?
Negde sam procitao da specijalne karaktere ne treba escape-ovati, ako su prvi u nizu. Ali ako ubacim tacku kao prvi element niza (ispred A):

^[.A-z0-9_]*$

on ce propustiti sve. A ako ubacim jos jedan backslash, onda ce raditi, propustace tacke, ali i backslash-eve:

^[\.A-z0-9_]*$

Kako da se resi ovaj problemcic?
Potpis
No signature...
Re: PHP i regex 14.11.2002. u 14:34 · pre 291 meseci #3
Obicna ereg() funkcija u PHP-u.
Potpis
No signature...
Re: PHP i regex 14.11.2002. u 15:51 · pre 291 meseci #4
Hm...
http://docs.kde.org/3.0/kdeutils/KRegExpEditor/whatIsARegExp.html kaze:
Citat:

Example 2.1. Searching for normal text.

If you just want to search for a given text, then regular expression is definitely not a good choice. The reason for this is that regular expressions assign special meaning to some characters. This includes the following characters: .*|$. Thus if you want to search for the text kde. (i.e. the characters kde followed by a period), then you would need to specify this as kde\.[1] Writing \. rather than just . is called escaping.

Dakle, trebalo bi da ti to radi, ne znam zasto ti propusta i backslash...?
Opet, mogao bi da probas i
^[\.\w]*$
(\w any "word" character, equivalent to [A-Za-z0-9_] )

Probaj pa javi, ja sad nemam vremena...
Potpis
Kad sve ostalo zakaže, pročitaj uputstvo...
Re: PHP i regex 14.11.2002. u 20:20 · pre 291 meseci #5
[\.\w] mi nije pomoglo. Problem ostaje isti: radi (i) to sto treba, ali propusta i slash.
Potpis
No signature...
Re: PHP i regex 15.11.2002. u 00:51 · pre 291 meseci #6
batali posix regex...

evo ti sa pcre:
Code:

echo preg_match("!^[\.\w]+$!", $username)


btw, primeti da sam stavio + umesto *, da bi morao da unese bar jedan karakter. ako oces da imash recimo 5-20 karaktera, stavi {5,20} umesto +
Potpis
blogče :: unescaped beta
  »
go-paste extenzija
  »
reč dana: backup
  »
bočne koalicije
Re: PHP i regex 19.11.2002. u 19:27 · pre 291 meseci #7
Ne možeš koristiti ,,A-z'', već probaj sa "^[.A-Za-z0-9_]+$". Ako ovo ne radi (a tačka ne mora biti na prvom mestu, crtica bi npr. morala zbog nizova 0-9, a-d i slično), onda ti ne valja regex biblioteka!!!

S obzirom na to da je ovo vrlo malo verovatno, dodaću još samo da niz u skupu znakova označava niz vrednosti -- regex biblioteka nema nikakvo saznanje o tome jesu li to slova ili ne. Prema tome "A-z" će uključiti i mnoge simbole koje najverovatnije nisi hteo, a možda je među njima i kosa crta. Tu si na samom početku i grešio.

U svetlu prethodnih napomena, dodaću i da možeš koristiti "^[.\w]+$" za isti rezultat.

Toliko
Potpis
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
Re: PHP i regex 20.11.2002. u 15:58 · pre 291 meseci #8
^[.\w]+$ - koliko je meni poznato:
. zamenjuje "any single character except a newline character", dakle, ovde ce mu proci i |, i \ i [ i ] i ...
\.\w znaci - . i niz karaktera koji moze da se sastoji od A-Za-z0-9_

a posto mu ni to ne radi - moguce da ima losu bibl. regexpa ili je nesto drugo u pitanju sto sad ne mozemo da pronadjemo sta.
Potpis
Kad sve ostalo zakaže, pročitaj uputstvo...
Re: PHP i regex 20.11.2002. u 22:55 · pre 291 meseci #9
To nije slučaj za POSIX regex; pogledaj, na primer (ovo će biti zvanično POSIX 2002 najverovatnije početkom decembra -- ali ovo je sve prebačeno gotovo istovetno iz starog POSIX-a; besplatna registracija može biti neophodna za čitanje), http://www.opengroup.org/onlin...s/xbd_chap09.html#tag_09_03_05 :
Citat:

The special characters '.' , '*' , '[' , and '\' (period, asterisk, left-bracket, and backslash, respectively) shall lose their special meaning within a bracket expression.


Izričito se navodi da nije potreban naročiti tretman za ,,.'', ,,\'' i druge simbole koji se ne koriste pri navođenju samog ,,bracket expression'' (uglaste zagrade, crtica itd.)

Prema tome, POSIX regex će time uključiti i (obrnutu) kosu crtu. Međutim, moguće je da ovo radi u Perl regex-u zato što se ,,backslash-nešto'' interpretira kao ,,nešto'' ukoliko mu nije unapred dodeljeno značenje.

Toliko

PS. Ja sam zaista isprobao dati primer na ispravnoj POSIX regex biblioteci, i on radi kako se očekuje (tj. kako *ja* očekujem, čitajući POSIX definiciju
Potpis
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
Re: PHP i regex 22.11.2002. u 12:08 · pre 291 meseci #11

Pogledajt regex2txt na soureforgetu.

Jako fina skripta koja olaksava rad sa regexima i umanjuje glavobolje bolje od kafetina ...
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme