[ rourke @ 18.04.2007. 14:37 ] @
Pozdrav svima,

Imam funkciju koja proverava uneti string parametar i vraca boolean ukoliko je uneti string prosao validaciju. Primer:

Code:

function isValid($Value)
{
  $ValidChars = ". _+";
  if(!eregi("^[a-z0-9$ValidChars]{" . MIN_SIZE . "," . MAX_SIZE . "}$",$Value))
  {
    return false;
  } return true;
}


MIN_SIZE i MAX_SIZE su konstante za minimalnu i maksimalnu duzinu (3, 24)

Ova funkcija obavjla posao, sve dotle dok se ne unese neki unicode znak (tj. prebaci se tastatura recimo na cirilicu i kuca šđč...). Odmah sam predpostavio da je greska negde u delu izraza : a-z i shvatio da mozda problem nije toliko lak.

Da li mozda imate neko resenje za ovo, tj. da li mozda moze nekako prosiriti ovaj "scope" od a-z i sl.

Da li mozda moram da menjam pristup iz korena?

Hvala na pomoci
[ 357_97 @ 18.04.2007. 16:23 ] @
Mislim da ce ti ovo pomoci....
Code:

  $data = 'Incredibiles';
  echo preg_match('/\w{3,24}/u',$data);
  // obrati paznju na [u] parametar, to znaci da trazi unicode karaktere
  // [\w] - trazi samo slova [word-character]


Ako sam bio jasan nece ti biti tesko da prepravis upit da odgovara tvojim zahtevima.

[Ovu poruku je menjao 357_97 dana 18.04.2007. u 20:16 GMT+1]
[ rourke @ 18.04.2007. 20:46 ] @
Nazalost ne radi :(

pokusao sam sa sledecim primerom:

Code:

  $data = 'švrća';
  echo preg_match('/\w{3,24}/u',$data);


(dokument je utf-8).

Vraca 0, dok za regularna slova vraca 1.

Pozdrav
[ rourke @ 18.04.2007. 20:54 ] @
Sada sam dodao

Code:

  $data = 'aaašvrća';
  echo preg_match('/\w{3,24}/u',$data);


i vraca 1

sad mi je vec manje jasno :)
[ 357_97 @ 18.04.2007. 22:13 ] @
Sto bi ovi iz M$-a rekli final edition... Znao sam da treba da predjem na Multibyte String Functions ali sam i tamo imao gremline no nekako nadjoh resenje... Setih se da sam citao o ovom problemu te iskoristih search. Detaljnije o problematici
ovde
Code:

 // $data = 'švrća2.00-@';  // false
 $data = 'švrćaPaLatinica'; // true    
 
 mb_internal_encoding('UTF-8');
 mb_regex_encoding('UTF-8');
 
 $final = mb_ereg ("^[[:alnum:][:digit:]._+]{3,24}$", $data);
 // Ovim se kupe slova, brojevi i znakovi [._+]
 echo ' -----> ' . $final;
[ rourke @ 18.04.2007. 23:57 ] @
Izgleda da je to to :)

Nadam se da dalje nece biti problema.

Hvala puno na pomoci, tesko da bih sam resio :)

Najvise me zbunjuju ove vrste parsiranja (PHP, Perl...), vidim da neke funkcije rade samo sa jednim od tipova.