Autor | Zpráva | ||
---|---|---|---|
Magelan Profil * |
#1 · Zasláno: 14. 12. 2008, 14:32:58
Dobrý den
mám jednoduchý regulární výraz, který má odfiltrovat/rozpoznat běžný český text (nevím, co s ním udělá tohle forum): ^[a-zA-Z0-9 ěščřžýáíéúůĚŠČŽÝÁÍÉÚďĎťŤńŇóÓ\.\-_:,!?\/\)\(]{0,1000}$ vcelku to dělá, co potřebuju, ale rád bych tam přidal ještě uvozovky. Ale ať už je přidám bez zpětného lomítka, nebo s ním, tak to nefunguje. Zkoušel jsme to najít na googlu, a zde, i na asi třech daších místech, kde se regulárními výrazy zabývají, ale nenašel. Možná to nejde? Možná neumím dost dobře hledat. Nemohl by jste mě někdo poradit, nebo nasměrovat srávným směrem? Děkuji |
||
Měsíček Profil |
#2 · Zasláno: 14. 12. 2008, 14:37:12
Reaguji na Magelana:
Ukážu ti jak bych to řešil v Javascriptu: <script type="text/javascript"> alert(/[^"]/.test('"')); // Neprojde. Protože je tam ". alert(/[^']/.test("'")); // Neprojde. Protože je tam '. </script> $reg_vyraz = "/vyraz/"; $reg_vyraz = /vyraz/; |
||
imploder Profil |
#3 · Zasláno: 14. 12. 2008, 14:53:30
Měsíček
„$reg_vyraz = /vyraz/;“ To hodí parse error, řetězec musí být v uvozovkách nebo apostrofech. Regulární výraz je taky řetězec. Magelan Nedávej výraz do uvozovek, dej ho do apostrofů. Mezi apostrofy můžeš mít v řetězci normálně napsané uvozovky (bez escapování). |
||
Měsíček Profil |
#4 · Zasláno: 14. 12. 2008, 15:00:32
Reaguji na implodera:
Máš pravdu, pletu si to s JS, čiliže takto třeba: <?php echo preg_replace("/[\"]/","*",'Ahoj"'); ?> |
||
Mastodont Profil |
#5 · Zasláno: 14. 12. 2008, 15:00:54
$line = 'co"koli'; echo preg_match("/\"/u", $line); Vrátí normálně 1. |
||
Magelan Profil * |
#6 · Zasláno: 14. 12. 2008, 17:31:55
To imploder:
já to mezi apostrofy mám, celá ta funkce je takto: function JeText($text="") { // odstranime prazdne znaky na zacatku a konci $text=trim($text); $regexp='/^[a-zA-Z0-9 ěščřžýáíéúůĚŠČŽÝÁÍÉÚďĎťŤńŇóÓ"\.\-_:,!?\/\)\(]{0,1000}$/'; if (preg_match($regexp,$text)) {return "ANO: ".$text;} else {return "NE: "; } } když použiju jako zkušební text tohle: tohle je textíček o šulíkování tak to normálně projde když tam kamkoliv vložím uvozovky, třeba takto: tohle je textíček" o šulíkování tak to neprojde. Máte někdo ponětí, co dělám špatně? |
||
Měsíček Profil |
#7 · Zasláno: 14. 12. 2008, 17:34:16
Zkus
$regexp='/^[a-zA-Z0-9 ěščřžýáíéúůĚŠČŽÝÁÍÉÚďĎťŤńŇóÓ\"\.\-_:,!?\/\)\(]{0,1000}$/'; |
||
Mastodont Profil |
#8 · Zasláno: 14. 12. 2008, 17:37:06 · Upravil/a: Mastodont
U mně to projde i tak.
|
||
Magelan Profil * |
#9 · Zasláno: 14. 12. 2008, 17:41:42
Nemůže to být tím, že to je na lokále na W2K?
|
||
Magelan Profil * |
#10 · Zasláno: 14. 12. 2008, 17:43:04
Jo, jinak tu variantu od Měsíčka jsem pochopitelně už zkoušel také.. :-( se stejným výsledkem
|
||
v6ak Profil |
#11 · Zasláno: 14. 12. 2008, 22:20:36
No on se nejdřív parsuje řetězec, kde se \" přeloží jako ". Pak se teprve parsuje regulární výraz. Takže to chce \\", tedy dvojité zpětně lomítko.
Jinak v posix výrazech je :alpha: apod. a v Perlových je taky něco, takže není potřeba vyjmenovávat abecedu. |
||
Časová prodleva: 5 dní
|
|||
Magelan Profil * |
#12 · Zasláno: 20. 12. 2008, 01:50:45
Díky, zřejmě byl problém jinde, on se mi text, kde byly nějaké uvozovky v textarea ve formuláři přenesl do toho skriptu s escapovanými uvozovkami. tedy například: tohle je text "kuku ruku ... se přeneslo jako: tohle je text \"kuku ruku ...
Takže chyba nebyla v tom regulárním výrazu. Omlouvám se, tohle mě nenapadlo (tedy časem ano, ale až časem). |
||
Časová prodleva: 15 let
|
0