Autor Zpráva
PetrSi
Profil *
Ahoj. Jak můžu dostat funkci eregi do podmínky? Vůbec to na nic nereaguje :(

if (eregi(.....)) {
.
..
.
}


Díky za pomoc
Luky
Profil
http://php.net/manual/en/function.eregi.php
Alphard
Profil
eregi() je deprecated, rovnou použijte preg_match().
Počet shod je návratová hodnota funkce, tu podmínku v [#1] máte správně.
Joker
Profil
PetrSi:
Chtělo by to lepší popis problému, „Vůbec to na nic nereaguje“ je poněkud vágní vyjádření.

Jinak:
- POSIX regulární výrazy (funkce ereg*) jsou v PHP zastaralé a neměly by se používat ve prospěch Perl-compatible regulárních výrazů (preg*).
- eregi vrací false, jestliže se řetězec neshoduje s výrazem. Jestliže se shoduje, vrací délku shody, s výjimkou případu kdy délka shody je 0 a není uveden třetí nepovinný parametr, pak vrací 1 (ehm). Odpovídající PCRE funkce preg_match vrací 0 nebo 1 (není shoda / je shoda). Každopádně by to použití mělo fungovat (s výjimkou dost specifických situací při použití funkce eregi). Což vede k domněnce, že:
- Nejpravděpodobnější příčina chyby je, že je buď špatně regulární výraz, nebo mu řetězec prostě neodpovídá.
PetrSi
Profil *
Alphard:
hm, ale funkce
preg_match();
ale asi nenahrazuje funkci
eregi();
jelikož eregi()... funguje a preg_match()... hodnotí výsledek pořád stejně,
čili jako !preg_match() stejně jako preg_match()
motik
Profil
PetrSi:
hodnotí výsledek pořád stejně,
čili jako !preg_match() stejně jako preg_match()

nějaký příklad by nebyl?
Joker
Profil
PetrSi:
funkce preg_match(); ale asi nenahrazuje funkci eregi();
Není to 1:1, v těch regulárních výrazech jsou určité rozdíly.

!preg_match() stejně jako preg_match()
Jak vypadá kód?
dodatek: Jen ten preg_match (plus případně bezprostředně související kód)
PetrSi
Profil *
motik:
nějaký příklad by nebyl?

Dokládám kód / tento funfuje

     $front = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]';

     $end = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';

     if (!eregi("^$front+(\\.$front+)*@($end?\\.)+$end\$", $var)) {

     echo 'chyba';

     }


s preg_match už nefunguje :(

     $front = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]';

     $end = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';

     if (!preg_match("^$front+(\\.$front+)*@($end?\\.)+$end\$", $var)) {

     echo 'chyba';

     }
o_O
Profil
PetrSi:
V preg_match musí být tzv. delimitery - tedy ukazovače (v překladu oddělovače) začátku a konce regulárního výrazu. Za takovýto znak si lze dosadit cokoliv, od obyčejného písmene / čísla po speciální znaky (za těmi se pak píší značky jako s, i, ...). V případě, že se tento znak bude vyskytovat v patternu, musí se escapovat ('~^[a-z\~-0-9]{1,}$~i').

Ve Vašem případě jsou použity téměř všechny mě známé složitější paznaky :-), tudíž bych doporučoval například:
if (!preg_match("°^$front+(\\.$front+)*@($end?\\.)+$end\$°", $var))

Existuje taktéž funkce preg_last_error(), pomocí které by jste zjistil, že je v něm chyba.
Tori
Profil
Případně místo hledání nepoužitého znaku jako oddělovače lze použít jakýkoli znak a regulár escapovat.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0