Autor Zpráva
TomasJ
Profil
Zdravím, zkoušel jsem regulární výraz aby mi vymazal znaky % a část kde je {xxxxxx} (místo xxxxxx bude hex kód nějaké barvy).
Zkoušel jsem to takto:
preg_replace("|[\%][\{.{6}\}]|U","",$_POST['nick']);
Jenže tuším, že tam mám chybu, jen nevím kde... Poradíte mi někdo? Děkuji.
juriad
Profil
s/%([0-9a-fA-F]{6})/\1/
takto to je v sedu, do php si pouprav sám
TomasJ
Profil
Bohužel, to mi nenahradí nic.
DJ Miky
Profil
Hranaté závorky [ ] značí výčet povolených znaků, tedy zápis [\{.{6}\}] by odpovídal jednomu znaku z množiny ("[", "{", ".", "6", "}"). Fungovalo by to obalené jednoduchými závorkami, ale jsou tam zbytečné:

preg_replace('~%\{[0-9A-F]{6}\}~i', '', $_POST['nick'])

Takový regulární výraz se pak chápe jako:
1) znak "%"
2) znak "{"
3) 6 znaků z množiny "0", "1", ..., "9", "A", "B", ..., "F" (díky modifikátoru "i" na konci RV projdou i malá písmena "a" až "f")
4) znak "}"
TomasJ
Profil
No ale co když třeba samotné složené závorky nechci nahradit, ale chci nahradit pouze, pokud bude {ffffff}.
Takže nějak takto:
$nick = "ahoj %jak se {9234a}mas?";
$nick2 = "%zdravim {ff2222}te";
$nick3 = "ahoj {f2d} :)";

//A chtěl bych aby to vypadalo po preg_replace() takto:
echo $nick; //vypíše "ahoj jak se {9234a}mas?"
echo $nick2; //vypíše "zdravim te"
echo $nick3; //vypíše "ahoj {f2d} :)"

.............................
Takže nikdo neví?
Tori
Profil
TomasJ:
aby mi vymazal znaky % a část kde je {xxxxxx}
Tohle se dá chápat jako "znak % následovaný částí {xxxxxx}", ale asi jste - podle těch příkladů - chtěl "znak % nebo šest šestnáctkových číslic ve slož.závorkách":
preg_replace('~%|\{[0-9A-F]{6}\}~i', '', $_POST['nick']);
TomasJ
Profil
Tori:
Děkuji. Jak se říká tomu "|"? :)

To je zvláštní. Teď mi jde napsat třeba %aa, %bb, ... %ff a vyhodí to nějaký divný znak. Procento se umaže a napíše mi to celé nějaký prapodivný znak.
Tedy jinak. Když napíšu znak % a za to 2 čísla 16kové soustavy, (0 - f) tak to vypíše jen divný znak.
Pravděpodobně znak odpovídá rozmezí ASCII 0 - 255.
Asi už vím proč, chyba je u mě. Posílám obsah formuláře pomocí XMLHttpRequest();. Děkuji, funguje jak má.
Tori
Profil
TomasJ:
Asi "svislítko", v reguláru odděluje alternativy (manuál).
Někde asi používáte (raw)urldecode na příchozí data.
TomasJ
Profil
Tori:
Ano v JS, hlavička setRequestHeader("Content-type", "application/x-www-form-urlencoded"). Takže jsem vše převedl na JS a nahradí se znak % ještě před odesláním formuláře. Děkuji.

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