logo
11.09.2012 21:59
1
Zdravím, přiznám se, že si s regulárníma výrazama moc nerozumím. A teď potřebuju ošetřit input, kam půjdou zadat pouze ASCII + pár dalších znaků jako například £€¥§ .

Neví někdo jak na to?

Googlil jsem co to dalo, ale nic moc jsem nenašel.

Našel jsem tohle, což funguje a projdou jenom ASCII znaky, ale nevím jak to upravit, aby prošlo i těch pár znaků co chci přidat.
PHP kód:
if(preg_match('/[\x80-\xFF]/'$string->value)) { 
                return 
FALSE;
             } else {
                 return 
TRUE;
             } 
Díky

Co se právě děje na Webtrhu?

11.09.2012 22:14
2
if(preg_match('/[\x80-\xFF]|(£|€|¥|§)+/

píšu z hlavy... ozkoušejte ;-)
11.09.2012 22:41
3
Ne, tohle nefunguje.
Už jsem ale asi přišel na způsob, jen nevím jak ho napsat.

Potřebuju zajistit, aby string obsahoval jenom znaky s HEX 20 - FF (viz. http://www.ascii-code.com/)
Jen nevím jak toho docílit.
11.09.2012 22:44
4
a tohle? taky jsem to nezkoušel ;o))
if(preg_match('/([a-zA-Z0-9£€¥§]+)/', $string->value)) {


---------- Příspěvek doplněn 11.09.2012 v 22:46 ----------

změnil jsem tam ještě velké Z
11.09.2012 22:57
5
Původně odeslal Bedříšek
a tohle? taky jsem to nezkoušel ;o))

---------- Příspěvek doplněn 11.09.2012 v 22:46 ----------

změnil jsem tam ještě velké Z
Tady asi neprojdou tečky, čárky, středník,... a spousta dalších věcí.

Jednoduše řečeno, co potřebuju je, aby se dal vložit pouze text v angličtině (neboli, jinak řečeno, potřebuji zakázat všechny národní abecedy - rozsypanej čaj, azbuka, arabština, čeština,...) ale nechci omezovat znaky, chci aby se tam dalo normálně psát, čemuž krásně odpovídá ASCII + pár znaků. Nebo Extended ASCII jak jsem zjistil. Jen to potřebuju zapsat. A teď dumám nad tím jak.

Když to vyjádřím slovně, tak potřebuju napsat v regulárním výrazu: pokud řetězec obsahuje cokoliv jiného než znaky s HEX 20 - FF (extended ASCII), tak ...
11.09.2012 23:00
6
K čemu to má sloužit? Proč jen ASCII? To používá jen malá část světa.
11.09.2012 23:01
7
Původně odeslal Registrace
Tady asi neprojdou tečky, čárky, středník,... a spousta dalších věcí.

Jednoduše řečeno, co potřebuju je, aby se dal vložit pouze anglický text, čemuž krásně odpovídá ASCII + pár znaků. Nebo Extendex ASCII jak jsem zjistil. Jen to potřebuju zapsat. A teď dumám nad tím jak.

Když to vyjádřím slovně, tak potřebuju napsat v regulárním výrazu: pokud řetězec obsahuje cokoliv jiného než znaky s HEX 20 - FF (extendet ASCII), tak ...
tak použij vlastní konstrukci

if(preg_match('/([\x80-\xFF£€¥§]+)/', $string->value)) {
11.09.2012 23:12
8
Původně odeslal Martin Schlemmer
K čemu to má sloužit? Proč jen ASCII? To používá jen malá část světa.
Jak píšu, chci aby se dalo psát jen v angličtině. Ale tím myslím normálně psát, tzn. libra, euro a podobný znaky chci, protože jsou pro normální diskuzi potřebný.

Původně odeslal Bedříšek
tak použij vlastní konstrukci
To už jsem zkoušel. Ale tady nic z £€¥§ neprojde.
12.09.2012 00:01
9
Proč jen angličtina? A jak souvisí angličtina s ASCII? V ASCII se dá psát spousty jazyky.
12.09.2012 13:26
10
Původně odeslal Martin Schlemmer
Proč jen angličtina? A jak souvisí angličtina s ASCII? V ASCII se dá psát spousty jazyky.
Protože jde o anglickej web, není a nebude plánován v cizích jazycích a nikdo se tam jinak než anglicky bavit nebude. Takže je zbytečný, aby tam byla možnost psát v různých šílených abecedách.

A ASCII proto, že nejlíp a dostatečně pokrývá celou škálu znaků, který se používají - tak aby neomezovala normální diskuzi, ale zároveň aby zabránila psaní v čemkoli jiným.

Ano, sice se v tom dá psát i spoustou jiných jazyků který používají latinku, ale o to mi nejde. Blbosti se budou mazat ručně i tak, ale omezení blbostí psaných například v čínštině se dá zbavit i automaticky.

Jen musím přijít na ten regulární výraz. A regulární výrazy, stejně jako htaccess jsou můj nepřítel - nepřehlednej guláš, různý vzájemný ovlivňování. Blbě se to učí a ještě hůř se to pamatuje. Zlatý "normální" syntaxe jako PHP, C++, JS,...
12.09.2012 13:48
11
To je velmi špatné řešení:

Angličtina není omezená na ASCII. Například osobní a místní jména používají různé znaky.
V množině ASCII znaků lze psát mnoha jazyky, které nejsou angličtinou.
Jde to proti všem trendům internacionalizace, což je oblast, ve které vývojáři webů a aplikací dělají dost chyb i nevědomky, natožpak s takovýmto nápadem.
Existují naprosto legitimní a užitečné vícebytové znaky, které svým whitelistem, omezeným na symboly čtyř měn, omezujete.
Omezením na ASCII můžete taky zneplatnit nové domény, emailové adresy nebo celé národní koncovky.
http://www.networkworld.com/news/200...ed-domain.html

Silně doporučuji, abyste tento nápad opustil. Je špatný, ublížíte svým uživatelům, neřkuli že ho chcete implementovat způsobem, kterému nerozumíte a který přinese další skryté problémy.
19.09.2012 22:26
12
V mém případě to má smysl, ale konkrétní důvody nechci rozvádět - zkrátka to uživatele omezovat nebude.

Jinak, kdyby někdo chtěl stejně jako já zakázat všechny exotický abecedy, tak pro ověření jsem si nakonec sestavil tento kód:
PHP kód:
if(preg_match("/\p{Arabic}|\p{Armenian}|\p{Avestan}|\p{Balinese}|\p{Bamum}|\p{Bengali}|\p{Bopomofo}|\p{Braille}|\p{Buginese}|\p{Buhid}|\p{Canadian_Aboriginal}|\p{Carian}|\p{Cham}|\p{Cherokee}|\p{Coptic}|\p{Cuneiform}|\p{Cypriot}|\p{Cyrillic}|\p{Deseret}|\p{Devanagari}|\p{Egyptian_Hieroglyphs}|\p{Ethiopic}|\p{Georgian}|\p{Glagolitic}|\p{Gothic}|\p{Greek}|\p{Gujarati}|\p{Gurmukhi}|\p{Han}|\p{Hangul}|\p{Hanunoo}|\p{Hebrew}|\p{Hiragana}|\p{Imperial_Aramaic}|\p{Inherited}|\p{Inscriptional_Pahlavi}|\p{Inscriptional_Parthian}|\p{Javanese}|\p{Kaithi}|\p{Kannada}|\p{Katakana}|\p{Kayah_Li}|\p{Kharoshthi}|\p{Khmer}|\p{Lao}|\p{Lepcha}|\p{Limbu}|\p{Linear_B}|\p{Lisu}|\p{Lycian}|\p{Lydian}|\p{Malayalam}|\p{Meetei_Mayek}|\p{Mongolian}|\p{Myanmar}|\p{New_Tai_Lue}|\p{Nko}|\p{Ogham}|\p{Old_Italic}|\p{Old_Persian}|\p{Old_South_Arabian}|\p{Old_Turkic}|\p{Ol_Chiki}|\p{Oriya}|\p{Osmanya}|\p{Phags_Pa}|\p{Phoenician}|\p{Rejang}|\p{Runic}|\p{Samaritan}|\p{Saurashtra}|\p{Shavian}|\p{Sinhala}|\p{Sundanese}|\p{Syloti_Nagri}|\p{Syriac}|\p{Tagalog}|\p{Tagbanwa}|\p{Tai_Le}|\p{Tai_Tham}|\p{Tai_Viet}|\p{Tamil}|\p{Telugu}|\p{Thaana}|\p{Thai}|\p{Tibetan}|\p{Tifinagh}|\p{Ugaritic}|\p{Vai}|\p{Yi}/u"$string)) { 
                return 
FALSE;
             } else {
                return 
TRUE;
             } 
Všechny normální znaky projdou, stejně jako latinka + diakritika evropských jazyků. Tzn. naprosto v klidu pro normální anglickou diskuzi bez jakýchkoliv omezení.
Co neprojde jsou všechny exotický abecedy (tzn. arabština, azbuka, asijský jazyky, včetně dialektů,...), zkrátka vše co nemá v normální (anglické a evropské) diskuzi co pohledávat a sloužilo by jenom pro trolling a podobný věci.
19.09.2012 22:40
13
Trollovat v anglické diskusi hebrejsky, velmi mazané.
19.09.2012 22:45
14
Původně odeslal naniccz
Trollovat v anglické diskusi hebrejsky, velmi mazané.
Pokud se v tý diskuzi baví Arabáci, tak ano.
16.01.2020 19:30
15
Online nástroj pro testování regulárních výrazů je na http://retezce.jednoduse.cz/
16.01.2020 19:32
16
ked uz obnovujes 8 rocnu temu tak doplnim regexr.com a regex101.com