| 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: 8 let
|
|||
0