Autor Zpráva
phphelp
Profil *
Ahoj,

Používám delší dobu na krácení opakujících se znaků tento regulární výraz:

$string = preg_replace("/(.)\\1{3,}/", "\\1\\1\\1", $string)


Je fajn, že pokud někdo napíše za větou X teček (.......), automaticky je upraví na ...

Problém nastává v případě, že někdo napíše třeba číslo 10000, v tom by byl trošku problém. Nevěděl by někdo, co s tím?
TomášK
Profil
Místo . dát výčet krácených výrazů [a-zA-Z] nebo naopak výčet výrazů, které nechcete krátit [^0-9]
needhelp
Profil *
Děkuji za odpověď. Bohužel v těch regulárních výrazech mám mezeru, nefunguje mi to. Věděl by si někdo rady?
needhelp
Profil *
Bude určitě lepší ta druhá možnost, protože by se měli krátit i vykřičníky, speciální znaky apod. Děkuji
needhelp
Profil *
Tak si s tím nikdo neví rady? :(
imploder
Profil
needhelp:
<?php
$znak = "[a-zA-Z0-9\.]|ě|š|č|ř|ž|ý|á|í|é|ě|ú|ů";
$string = preg_replace("/($znak)\\1{2,}/", "\\1", $string);
?>

ukázka: http://codepad.org/E66wCyqH
phphelp
Profil *
imploder: naprosto pefektní, znáš mapu! Díky moc!
Chamurappi
Profil
Reaguji na phphelpa:
Jestli ti ale připadala lepší ta druhá možnost, tak za ten $znak dosaď spíš [^0-9].


Reaguji na implodera:
Proč nejsou ty znaky s diakritikou (kde jich mimochodem řada chybí a ě tam je dvakrát) také ve výčtu znaků?
imploder
Profil
Chamurappi:
Aha, tohle by mohlo být nedorozumění, takže: ty znaky jsou myšleny jen jako příklad. Nevěděl jsem, jaké všechny znaky chce phphelp krátit, tak jsem vybral prostě nějaké jako příklad a ať si to přizpůsobí.

Proč nejsou ty znaky s diakritikou (kde jich mimochodem řada chybí a ě tam je dvakrát) také ve výčtu znaků?
Jaké znaky s diaktitikou? Mám tam všechny znaky, které potřebuju ja ukázkový text (viz ukázka). Dvakrát "ě" je samozřejmě omyl. Je to jenom příklad.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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