Autor Zpráva
Magelan
Profil *
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
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>
Prinicp je tedy v tom, že nesmíš použít při zadávání [R] výrazu uvozovky či apostrofy takže výraz by neměl být
$reg_vyraz = "/vyraz/";
,ale
$reg_vyraz = /vyraz/;
imploder
Profil
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
Reaguji na implodera:

Máš pravdu, pletu si to s JS, čiliže takto třeba:
<?php echo preg_replace("/[\"]/","*",'Ahoj"'); ?>
Mastodont
Profil
$line = 'co"koli';
echo preg_match("/\"/u", $line);


Vrátí normálně 1.
Magelan
Profil *
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
Zkus

$regexp='/^[a-zA-Z0-9 ěščřžýáíéúůĚŠČŽÝÁÍÉÚďĎťŤńŇóÓ\"\.\-_:,!?\/\)\(]{0,1000}$/'; 
teď by "tohle je textíček" o šulíkování" měl projít.
Mastodont
Profil
U mně to projde i tak.
Magelan
Profil *
Nemůže to být tím, že to je na lokále na W2K?
Magelan
Profil *
Jo, jinak tu variantu od Měsíčka jsem pochopitelně už zkoušel také.. :-( se stejným výsledkem
v6ak
Profil
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.
Magelan
Profil *
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).

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: