[ mitke013 @ 21.01.2010. 18:00 ] @
Treba mi mala pomoc;
imam sledeci regexp:
/^[a-zA-ZžŽđĐšŠćĆčČ ]+$/

Treba mi da je validan ako je string prazan (ne NULL, vec nula duzina) ili ako nije prazan da proveri po gornjem pravilu. Ubih se trazeci i ne mogu da ga napravim. Pomoc?
[ Aleksandar Ružičić @ 21.01.2010. 18:45 ] @
probaj sa: /^[a-zA-ZžŽđĐšŠćĆčČ ]*$/u
[ mitke013 @ 21.01.2010. 19:07 ] @
Moja greska, nisam dobro prepisao regex, treba:

/^[a-zA-ZžŽđĐšŠćĆčČ ]{3,20}$/

Znaci ili prazan string ili da ima izmedju 3 i 20 karaktera.

@aleksandar
Hvala, radi za onaj koji sam prvi put poslao, ali ne i za ovaj.
[ Nikola Poša @ 21.01.2010. 19:13 ] @
Pa stavi onda samo {0,20} umesto {3,20}.
[ Man-Wolf @ 21.01.2010. 19:14 ] @
Hmm, aj probaj ovako:

Code:


// Pretpostavimo da je $string string koji imas

$string = trim($string); // Obrisi whitespace-ove

$regex = "/[\w\s]{3,20}/";

if (empty($string) || preg_match($regex, $string)) {

// String je ok

}



Nisam probao, ali mislim da bi trebalo da radi...
[ kazil @ 21.01.2010. 20:37 ] @
Samo jedan mali heads-up. Matchovanje utf8 karaktera ne radi (jos uvek, kako treba). Da, ima u modifier, ali zna da pravi probleme.

Code (php):


$string = 'š';

var_dump(preg_match('#\w{1}#', $string)); // 0

var_dump(preg_match('#\w{1}#u', $string)); // 0

var_dump(preg_match('#.{1}#', $string)); // 1

mb_regex_encoding('utf-8');
var_dump(mb_ereg_match('\w{1}', $string)); // true

 


Tako da, prvi pattern nece machovati nista ako su uneti samo utf8 karakteri.
[ mitke013 @ 22.01.2010. 00:17 ] @
Citat:
Man-Wolf: Hmm, aj probaj ovako:

Code:


// Pretpostavimo da je $string string koji imas

$string = trim($string); // Obrisi whitespace-ove

$regex = "/[\w\s]{3,20}/";

if (empty($string) || preg_match($regex, $string)) {

// String je ok

}



Nisam probao, ali mislim da bi trebalo da radi...


Uradio bih ja to, ali mora da ostane regexp. Koristim Doctrine validaciju pa ne mogu da pisem custom f-je. Tj. mogu, al sto komplikovati.

Citat:
Nikola Poša: Pa stavi onda samo {0,20} umesto {3,20}.


Mora da bude ili prazan string ili da ima izmedju 3 i 20 karaktera. Ne moze 1 ili 2 i mora da bude jedan regexp. Ludilo, nigde na netu ne mogu da nadjem regexp za ovo.
[ mitke013 @ 22.01.2010. 00:20 ] @
Citat:
kazil: Samo jedan mali heads-up. Matchovanje utf8 karaktera ne radi (jos uvek, kako treba). Da, ima u modifier, ali zna da pravi probleme.

Code (php):


$string = 'š';

var_dump(preg_match('#\w{1}#', $string)); // 0

var_dump(preg_match('#\w{1}#u', $string)); // 0

var_dump(preg_match('#.{1}#', $string)); // 1

mb_regex_encoding('utf-8');
var_dump(mb_ereg_match('\w{1}', $string)); // true

 


Tako da, prvi pattern nece machovati nista ako su uneti samo utf8 karakteri.


Ne znam za ovo, meni potpuno normalno rade nasa slova. Jedino sto svako nase slovo broji 2 bajta, ali to mi nije narocito bitno.
[ mitke013 @ 22.01.2010. 00:35 ] @
Ok drugari, nasao sam resenje. Ako nekog zanima, | je regexp za OR, pa je izraz:

/^([a-zA-ZžŽđĐšŠćĆčČ ]{3,20}|)$/
[ kazil @ 22.01.2010. 06:02 ] @
Vid' stvarno hvata nase karaktere ako se unesu u regex... funny. A da li si mozda probao sa cirilicom? Ako vec koristis šđžčć u regexu, mozda ti se pojave i cirilicna slova, a dodavati 60 karaktera u regex rucno je... Neprakticno. U tom slucaju probaj sa mb_* funkcijama.
[ mitke013 @ 22.01.2010. 21:16 ] @
Citat:
kazil: Vid' stvarno hvata nase karaktere ako se unesu u regex... funny. A da li si mozda probao sa cirilicom? Ako vec koristis šđžčć u regexu, mozda ti se pojave i cirilicna slova, a dodavati 60 karaktera u regex rucno je... Neprakticno. U tom slucaju probaj sa mb_* funkcijama.


Ja sam 'strani placenik' pa me za cirilicu nimalo ne brine :)

Zezam se. Probacu, mada koliko se secam, nikad sa time nisam imao problema. Tj. bar se klijenti nisu zalili a meni iskreno nije ni palo na pamet da testiram tako nesto.