abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 0
včera 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 16
2.12. 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 8
2.12. 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 2
2.12. 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
2.12. 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 0
2.12. 00:10 | Nová verze

Byla vydána verze 3.2 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata. Z novinek lze zmínit například podporu protokolů DNP3 a CIP/ENIP, vylepšenou podporu TLS a samozřejmě také aktualizovanou dokumentaci.

Ladislav Hagara | Komentářů: 0
1.12. 21:00 | Nová verze

Byla vydána beta verze Linux Mintu 18.1 s kódovým jménem Serena. Na blogu Linux Mintu jsou hned dvě oznámení. První o vydání Linux Mintu s prostředím MATE a druhé o vydání Linux Mintu s prostředím Cinnamon. Stejným způsobem jsou rozděleny také poznámky k vydání (MATE, Cinnamon) a přehled novinek s náhledy (MATE, Cinnamon). Linux Mint 18.1 bude podporován až do roku 2021.

Ladislav Hagara | Komentářů: 0
1.12. 16:42 | Nová verze

Byl vydán Devuan Jessie 1.0 Beta 2. Jedná se o druhou beta verzi forku Debianu bez systemd představeného v listopadu 2014 (zprávička). První beta verze byla vydána v dubnu letošního roku (zprávička). Jedna z posledních přednášek věnovaných Devuanu proběhla v listopadu na konferenci FSCONS 2016 (YouTube, pdf).

Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 767 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: PHP - kontrola mezer v řetězci

27.6.2015 14:30 VelkyBubak
PHP - kontrola mezer v řetězci
Přečteno: 439×
Jsem si vědom, že podobná otázka tu již padla (http://www.abclinuxu.cz/poradna/programovani/show/328193). Bohužel na ni nebylo odpovězeno a bylo nalezeno jiné řešení.

udělal jsem si zatím hrubý nástin funkce jíž chci kontrolovat vkládané texty:
function kontrola_textu($kde) {
	
	$kde = trim(strip_tags($kde));
	
	$ke_kontrole = strlen($kde);
	$ke_kontrole2 = floor($ke_kontrole / 2);
	$znaky = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', '.', ',', '/', '*', '-', '_', '\\', '!', '?', '(', ')');
	
	foreach ($znaky as $znak) {
	
	$pocet = substr_count($kde, $znak);
	
	if ($pocet > $ke_kontrole2 or $ke_kontrole < 50) return $pocet;
}

return 0;

}
toto funguje dobře na všechny znaky v poli, kromě mezery. Což mě přivádí k původní otázce.

Odpovědi

27.6.2015 14:39 Kit | skóre: 36 | Brno
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
A jak zní otázka?
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
27.6.2015 15:15 VelkyBubak
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
och, já zapomněl: Jak zkontrolovat mezery v řetězci? PS: protože se zdá že, mezeru zapsanou takto:
' '
funkce nespatřuje schodnou s mezerou v textu
27.6.2015 16:52 Kit | skóre: 36 | Brno
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Bílých znaků je víc druhů. Tuším, že tam může zlobit chybně použitý "OR".
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
27.6.2015 19:40 VelkyBubak
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Netuším zda je or chybně použitý, ale i kdyby, nemá vliv na výsledek kontroly.

Jakým způsobem tedy mohu otestovat: a) jaká mezera tedy vlastně použita v textu b) všechny možné mezery v textu

27.6.2015 19:53 Kit | skóre: 36 | Brno
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Na výsledek kontroly nemá zřejmě vliv nic, protože jsem zatím nenašel žádný string, pro který by bylo výsledkem nenulové číslo.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
28.6.2015 07:01 VelkyBubak
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
tak tohle je jen pro začátek (jde o hodnocení a uživatelé musí zadat minimálně 50 znaků), přičemž prvotní záměr tohohle scriptu je, aby nešlo vkládat pitomosti typu: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa , což je právě ten typ výrazu který dá nenulový výsledek
28.6.2015 07:06 Kit | skóre: 36 | Brno
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Vskutku. A stejně to reaguje i na mezery.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
28.6.2015 07:18 VelkyBubak
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Jistě, netvrdím, že to nikomu nemůže fungovat, ale mě to s textem který mi někdo zadá do formuláře (z něhož se POSTem pošle scriptu), pokud jde o mezery prostě nefunguje a tak se snažím přijít na to, jak kontrolovat mezery (a pokud jich je více druhů, jak kontrolovat i ty ostatní)
28.6.2015 07:27 Kit | skóre: 36 | Brno
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Zkus odstranit funkci trim() a pochopíš.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
28.6.2015 20:44 VelkyBubak
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Díky. Hezké, takže bude fungovat, pokud do testu přidám rovnost (aby podmínka fungovala s nulou) a v těle if ošetřím možnost $pocet == 0 tak aby nevracela nulu...
28.6.2015 21:21 Kit | skóre: 36 | Brno
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Domnívám se, že někdy je lepší podmínky ubrat, než přidat.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
29.6.2015 08:55 VelkyBubak
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
takže dáváš přednost tomuto:
if ($pocet >= $ke_kontrole2) { if ($pocet == 0) {$pocet = 1;} return $pocet;}
nebo tomuto:
if ($pocet > $ke_kontrole2) return $pocet;
if ($pocet == 0) return 1;
Nicméně pořád mám problémy s mezerami:
function kontrola_textu2($kde) {
	
	$kde = trim(strip_tags($kde));
	
	$ke_kontrole = strlen($kde);
	$ke_kontrole2 = floor($ke_kontrole / 2);
	$znaky = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', '.', ',', '/', '*', '-', '_', '\\', '!', '?', '(', ')');
	
	foreach ($znaky as $znak) {
	
	$pocet = substr_count($kde, $znak);
	
	if ($pocet >= $ke_kontrole2) { if ($pocet == 0) {$pocet = 1;} return $pocet;}
}

return 0;

}

$a = "98 g8f98hf hgfh9999999999999999999999999999999999999999999 899999999999999999999999";
$b = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
$c = "                                                                                   ";

echo kontrola_textu2($a)."
"; echo kontrola_textu2($b)."
"; echo kontrola_textu2($c)."
"; echo "
"; echo strlen($a)."
"; echo strlen($b)."
"; echo strlen($c)."
";
Výsledky: 68 83 1 83 83 83 a přitom, zadám-li do vstupního pole, na nějž tyto funkce také aplikuji deset mezer jde prý o 18 znaků
29.6.2015 10:02 Kit | skóre: 36 | Brno
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Však ty výsledky jsou správně. Poté, co jsi na string $c aplikoval funkci trim(), je prázdný.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
27.6.2015 20:06 Kit | skóre: 36 | Brno
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Proč vlastně přepisuješ formální parametr $kde? Má to nějaký význam? Osobně je považuji za nedotknutelné. Co ta zkratka znamená?
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
28.6.2015 07:11 VelkyBubak
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Proč? Nevím proč používat další proměnnou, když mohu tuhle přepsat, zvlášť když původní hodnotu již dále nepotřebuji. Osobně je považuji za zcela normální a i tedy přepisovatelné proměnné.

PS: není to zkratka, prostě jsem si řekl 'kde kontrolovat' a proměnná získala název. Je pro mě důležité abych se v tom vyznal, a řeším to českými názvy (bez diakritiky pochopitelně)
28.6.2015 07:32 Kit | skóre: 36 | Brno
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Hlavním důvodem však je neztratit kontinuitu, co se ve které proměnné nachází.

Další proměnou používám i proto, abych ušetřil čas a paměť.

Bylo by rozumnější pro názvy proměnných používat podstatná jména. Je to důležité pro to, aby ses v tom vyznal.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
29.6.2015 09:04 VelkyBubak
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Promiň, ale když použiješ další proměnnou, tak asi moc paměti neušetříš, vlastně bych myslel, že to bude právě naopak. A co se času týká, netuším na co narážíš - jakože přepsat proměnnou je časově náročnější než založit novou?

Jen tak pro zajímavost, jak ji v daném případě to pojmenoval ty?
29.6.2015 10:18 Kit | skóre: 36 | Brno
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Zkus si udělat pár testů na obsazení paměti v PHP a uvidíš. Ke "přepsání" proměnné nedochází, pokaždé se vytváří nová a ta původní se nechá sežrat v GC. Je tedy praktičtější uvolňovat lokální proměnné naráz při opuštění scope, v našem případě funkce.

"Přepsáním" formálního parametru se v paměti vytváří jeho klon, aby se originál nepoškodil. Originál tím ve funkci přestane být dostupný, ale v paměti zůstává, protože na něj stále je odkaz skutečného parametru při volání funkce.

Nejpraktičtější a nejrychlejší je v PHP pracovat s proměnnými tak, jako kdyby byly immutable. Zároveň tím odpadnou problémy se čtením takového programu - zpravidla je v něm méně WTF.

A pojmenování proměnné? Asi jen "$text", ale vzhledem k tomu, že bych ten vnitřek udělal úplně jinak kvůli rychlosti, měly by ostatní proměnné jiný účel.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
9.7.2015 12:35 Lucius
Rozbalit Rozbalit vše Re: PHP - kontrola mezer v řetězci
Nevim jestli jsem dobre pochopil dotaz, pokud ano tak reseni je zhruba takove:
/*
$tmpInput - vstupni retezec
$selectType - co ma fu count_chars vratit  - viz. dokumentace

*/

$selectType = 1;
foreach(count_chars ($tmpInput,$selectType) as $key=>$value){
	echo '"'.chr($key) . '" - '.$value. "\n";
}

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.