Autor | Zpráva | ||
---|---|---|---|
PetrSi Profil * |
#1 · Zasláno: 15. 9. 2011, 22:28:02
Ahoj. Jak můžu dostat funkci eregi do podmínky? Vůbec to na nic nereaguje :(
if (eregi(.....)) { . .. . } Díky za pomoc |
||
Luky Profil |
#2 · Zasláno: 15. 9. 2011, 22:29:47
|
||
Alphard Profil |
#3 · Zasláno: 15. 9. 2011, 22:41:19
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 |
#4 · Zasláno: 15. 9. 2011, 22:46:39
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 * |
#5 · Zasláno: 16. 9. 2011, 00:07:39
Alphard:
hm, ale funkce preg_match(); eregi(); čili jako !preg_match() stejně jako preg_match() |
||
motik Profil |
#6 · Zasláno: 16. 9. 2011, 00:14:18
PetrSi:
hodnotí výsledek pořád stejně, čili jako !preg_match() stejně jako preg_match() nějaký příklad by nebyl? |
||
Joker Profil |
#7 · Zasláno: 16. 9. 2011, 08:03:35 · Upravil/a: Joker
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 * |
#8 · Zasláno: 18. 9. 2011, 13:01:56
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 |
#9 · Zasláno: 18. 9. 2011, 13:17:14 · Upravil/a: o_O
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 |
#10 · Zasláno: 18. 9. 2011, 19:43:42
Případně místo hledání nepoužitého znaku jako oddělovače lze použít jakýkoli znak a regulár escapovat.
|
||
Časová prodleva: 13 let
|
0