Autor | Zpráva | ||
---|---|---|---|
RadeKrtek Profil * |
Ahoj, mám toto:
$prvni = ereg(' {2,}', $text); $druhy = ereg('[^A-Za-z0-9_ ]', $text); 1) mám to dobře napsané? já regulárním výrazům absolutně nerozumím, tohle sem vytvořil čistě náhodou pokus, omyl 2) jak ty dva spojit do jednoho? zkoušel jsem tohle ale nefunguje to: $druhy = ereg(' {2,}[^A-Za-z0-9_ ]', $text); |
||
Kajman Profil |
#2 · Zasláno: 24. 9. 2018, 21:02:34
Chcete NEBO nebo A? Proč nesmí zůstat výrazy samostatně?
|
||
RadeKrtek Profil * |
#3 · Zasláno: 24. 9. 2018, 21:22:16
chtěl bych "A", mohli by, když nad tim tak přemýšlím, ale do budoucna bych chtěl vědět jak na to
|
||
Radek9 Profil |
RadeKrtek:
1) Pro starou verzi PHP je to akceptovatelné, ale od PHP verze 7.0.0 již ereg funkce neexistují. Měl bys místo toho použít funkci preg_match . Pokud jde o ten druhý regulár, tak to, co jsi popsal, odpovídá negaci toho tvého výrazu. Takže by to správně mělo být buď takto:
$prvni = preg_match('/ {2,}/', $text); $druhy = preg_match('/[^A-Za-z0-9_ ]/', $text); if ($prvni && !$druhy) { // splněno } $prvni = preg_match('/ {2,}/', $text); $druhy = preg_match('/^[A-Za-z0-9_ ]*$/', $text); if ($prvni && $druhy) { // splněno } 2) Spojit je do jednoho (pokud tedy skutečně chceš, aby platily obě podmínky) můžeš třeba takto: if (preg_match('/^[A-Za-z0-9_ ]* {2,}[A-Za-z0-9_ ]*$/', $text)) { // splněno } |
||
RadeKrtek Profil * |
a když bych tam chtěl ještě přihodit znaky []() tak to musím odescapovat, ale to pak nebude fungovat
$druhy = ereg('[^A-Za-z0-9_ \]\[\(\)]', $text); aha, s tim preg match to už funguje... díky |
||
Radek9 Profil |
RadeKrtek:
Proč by to nemělo fungovat? Edit: S ereg funkcemi nemám až takové zkušenosti, možná se to tam dělá jinak. Ale od verze 5.3.0 jsou zastaralé a od verze 7.0.0 neexistují. Nepoužívej je. |
||
RadeKrtek Profil * |
ale ještě jedna věc... jak mám odstranit znaky jako tabulátor?
a nemusí to být pomocí regulerních výrazů, prostě jak odstranit tabulátory a další netisknutelný znaky krom bílích znaků... s tim preg_match to už funguje.... asi sem s tim erege dělal něco špatně. |
||
Keeehi Profil |
RadeKrtek:
„prostě jak odstranit tabulátory a další netisknutelný znaky krom bílích znak“ Tabulátor je ale bílý znak. Myslím že bude jednodušší když nám řekneš co vše má být zachováno a my ti pak napíšeme kód co odstraní vše ostatní. V zásadě to bude vypadat takto: $output = preg_replace('~[^vse co ma zustat]+~', '', $input); |
||
RadeKrtek Profil * |
#9 · Zasláno: 25. 9. 2018, 15:55:36
Keeehi:
tyto znaky - mezera, závorky, čísla a písmena od A do Ž A-Za-z0-9_ ][() |
||
Kajman Profil |
#10 · Zasláno: 25. 9. 2018, 19:22:05
pokud používáte jednobytové kódování (cp1250, iso-8859-2), tak zkuste
preg_replace('~[^A-Za-z0-9_ \\][()ĚŠČŘŽÝÁÍÉÚŮĎŤŇÓěščřžýáíéúůďťňó]+~', '', $input); preg_replace('~[^A-Za-z0-9_ \\][()ĚŠČŘŽÝÁÍÉÚŮĎŤŇÓěščřžýáíéúůďťňó]+~u', '', $input); |
||
RadeKrtek Profil * |
#11 · Zasláno: 25. 9. 2018, 21:23:05
hm, ale co když chci i od a až do ž, dá se to nějak zapsat kromě vyjmenování všech těch ščřžý,...? preg_match('/[^A-Za-z0-9_ ]/', $text);
|
||
Radek9 Profil |
RadeKrtek:
„dá se to nějak zapsat kromě vyjmenování všech těch ščřžý,...?“ Ne. Ty rozsahy v hranatých závorkách ( a-z , A-Z a 0-9 ) jsou vlastně rozsahy v rámci Unicode tabulky (tedy v případě utf-8, u cp1250 a iso-8859-2 by to byla jiná tabulka). A funguje to jenom proto, že jsou ty znaky v tabulce za sebou. Což ale neplatí u znaků s diakritikou, jak se v té tabulce můžeš přesvědčit, protože jsou mezi nimi zamíchané i jiné znaky. Proto je potřeba je explicitně vypsat.
|
||
Keeehi Profil |
#13 · Zasláno: 26. 9. 2018, 02:15:38
RadeKrtek:
Ale dá se to udělat. \w popisuje skupinu písmen, čísel a podtržítka. Pokud se do reguláru přidá modifikátor u pak to zvládne i méně běžné písmenné znaky. Takže myslím že by to mohlo vypadat takto:
$output = preg_replace('~[^\w\][()]+~u', '', $input); |
||
Časová prodleva: 6 let
|
0