Autor Zpráva
Igor
Profil *
Dobrý den,

potřeboval bych upravit tento řetězec pro php 5.3

if (eregi($start, $aktualne) && eregi($konec, $aktualne))

když dám jen

if (preg_match($start, $aktualne) && preg_match($konec, $aktualne))

tak to nefunguje a nemůžu nikde najít úpravu pro konkrétní případ.
Nevíte někdo co s tim?

Díky I.
Hologos
Profil
Regulární výrazy, které se používají pro funkce ereg*, jsou jiné než regulární výrazy pro funkce preg*..
Z toho plyne, že pokud nepošleš regulární výrazy, které používáš, nikdo ti je nemůže pomoct předělat pro funkce preg*.
AM_
Profil
obecně platí rozdíl, že v preg se musejí zavřít do delimiterů (delimiter-výraz-delimiter-modifikátory), přičemž delimiter může být skoro jakýkoli nealfanumerický znak, vhodné je volit takový, který se ve výrazu nevyskytuje a není ho tam potřeba esvapovat.
např.
eregi('[a-z]', $neco);

je ekvivalentní s
preg_match('~[a-z]~i', $neco);

kde ~ je delimiter a i case-insensitive modifikátor.
Jak zmínil Hologos, jsou i drobné rozdíly ve fungování obou modelů a tedy některé výrazy je potřeba upravit, ale rozdíly jsou spíše v tom, že preg_* toho umí víc, u přechodu z ereg_ stačí většině výrazů přidat delimitery (a modifikátor i v případě eregi)
Igor
Profil *
AM:
Jo, tohle už jsem si dohledal a jeden řádek podobnym způsobem opravil, ale pro tenhle konkrétní případ jsem nenašel nic jak to správně "zkombinovat" :)

Mám místo

if (eregi($start, $aktualne) && eregi($konec, $aktualne))
dát

if (preg_match('~[a-z]~i', $start, $aktualne) && preg_match('~[a-z]~i', $konec, $aktualne)) ?? To je přece hloupost.

Nejsem programátor, jen se snažim dát dohromady script k webu který jsem kdysi koupil, teď ho přesunul na jiný hosting a u kterýho už nefunguje podpora.

Hologos:
Jak je poznám? U jinýho řádku jsem jen nahradil

if (eregi("\[", $v) && eregi("\]", $v))

tímhle

if (preg_match("/\[/i", $v) && preg_match("/\]/i", $v))
AM_
Profil
Igor:
Mám místo...
stačí trocha selského rozumu abys viděl jaká je to blbost :) možná raději:

preg_match("~$konec~i", $start, $aktualne)


Jak je poznám?
tohle by zrovna mělo být správně. Ale ukazuje to, že autor kódu zřejmě nebyl moc kvalitní programátor; celé se to dá zapsat jako
if preg_match("~[][]~i", $v)
, navíc tam nemá žádná písmenka, takže není důvod používat eregi.
Igor
Profil *
AM:
Přesně tohle jsem chtěl vidět, díky moc :)

Funguje to takhle:
if (preg_match("~$start~i", $aktualne) && preg_match("~$konec~i", $aktualne))

P.S.: já to zkoušel třeba
if (preg_match("~$start~i", "~$aktualne~i") && preg_match("~$konec~i", "~$aktualne~i"))
a podobně :)

Ještě jednou dík ;)

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