PHP funkce pro práci s řetězci
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

PHP funkce pro práci s řetězciPHP funkce pro práci s řetězci

 

PHP funkce pro práci s řetězci

Google       Google       27. 2. 2009       32 270×

Podívejme se dnes na základní přehled funkcí, které se vám můžou hodit a jsou prakticky denně použitelné. Povětšinou je lze obejít vlastním kódem, a právě proto je dobré je znát, abychom neprogramovali nové „kolo“. Dnes se bude vše točit kolem řetězců, což je problematika, která je na programu každý den.

Reklama
Reklama

Měříme a vybíráme

Kdykoliv budete pracovat s řetězci, určitě budete potřebovat minimálně funkci strlen(), která vám zjistí délku řetězce. Díky ní už můžete testovat, zda zadaný vstup z formuláře má minimální délku, či jestli nepřesahuje povolené limity. Pokud k proměnné chcete přidat nějaký text, není problém jej připojit pomocí tečky. Odebrání některé části je ale komplikovanější. Základní funkcí pro tuto operaci je substr($string, $start, $length), která ze $string vybere text od $start, délky $length. Zajímavostí je, že můžete $start zadat i záporný a pak se počítá odzadu. To samé platí i pro $length.

$string = "Hi there! Merry Christmas.";
$new = substr($string, 10);

echo $new; // Merry Christmas.

Procházíme

Jak je vidět, 10 nám říká, že máme vybírat od 10. znaku. Z toho jasně plyne, že jednotlivé znaky jsou očíslovány. Tuto vlastnost můžeme jednoduše využít a procházet řetězec jako pole. Pokud si k tomu ještě přihodíme funkce chr() a ord(), které převádějí znak na jeho ASCII číslo, respektive naopak, pak máme celkem dobrý základ pro sestavení Caesarovy šifry.

$string = "Zasifruj me";
for ($i = 0, $to = strlen($string); $i < $to; $i++) {
        $string[$i] = chr(ord($string[$i]) + 5);
}

echo $string; // _fxnkwzo%rj

Toto vše používáme tehdy, když víme, kde chceme dané operace provádět. Pokud se nám ale něco v textu „skrývá“, musíme to nejprve najít. K tomu poslouží funkce strpos($string, $searched), která vrátí index začátku výskytu $searched v proměnné $string. Pokud se nic nenajde, vrací false.

$text = "Tady se ještě nic nevezme ... START A odtud bude už všechno vidět!!! END Teda, skoro všechno";
$start = strpos($text, 'START') + 6; // přičteme délku startu + jednu mezeru
$end = strpos($text, 'END');
$length = $end - $start;

if ($start !== false && $end !== false)
        echo substr($text, $start, $length);
else
        echo 'V textu není vyznačen start a end.';

Jak vidíte, práce s textem už začíná být vcelku zajímavá.

Funkce str_pad() vám prodlouží řetězec do požadované délky. To se hodí, zvlášť pokud chcete generovat nějakou fakturu. Můžete si vybrat, které znaky chcete přidávat a kam - jestli na začátek, nebo na konec.

$input = "jedentisícstopadesátosm";
echo str_pad($input, 30, "-", STR_PAD_LEFT); // -----jedentisícstopadesátosm

Ošetřujeme

Již jsme si zmínili, že pro kontrolu délky vstupu lze použít funkci strlen(). S tím si ale nikdy nevystačíme. A i kdyby nám stačila pouze kontrola délky vstupu, tak i přesto nás může nepřítel jednoduše obelstít. Stačí, aby zadal pár mezer – bílých znaků. Bílé znaky - pro toho, kdo neví - jsou všechny „netisknutelné znaky“: mezery, tvrdé mezery, tabulátory, odřádkování atp. Můžeme se jich krásně zbavit pomocí funkce trim().

$input = "Ošizená délka vstupu.            ";
echo strlen($input); // 36

echo "<br />";

$input = trim($input);
echo strlen($input); // 24

Ve výchozím nastavení trim odstraňuje ony bílé znaky. Ale může se nám hodit, že chceme z konce a ze začátku řetězce odstranit i jiné znaky než bílé. Například lomítka. K tomu má funkce ještě druhý parametr, kam zadáme výčet jednotlivých znaků. Tato funkce existuje ještě ve variantách rtrim(), ltrim() – rozdíl je v tom, že odstraňují znaky pouze z jedné strany.

Často potřebujeme posoudit vstup podle komplexnějšího pravidla. K tomu používáme takzvané regulární výrazy. Regulární výraz je sekvence znaků popisující požadovaný řetězec. Některé znaky mají samozřejmě zvláštní význam, a tak nám vznikne regulár, který je obecný a přitom dostatečně popisuje formát vstupu. Perfektním webem v češtině je například regularnivyra­zy.info. Zde můžete najít jednoduché příklady a kvalitní přehled významu jednotlivých znaků.

V PHP používejte Perl compatible regulární výrazy! Jsou o mnoho rychlejší než posix regulární výrazy a také toho zvládnou více. Základní funkcí je preg_match, která zjistí, zda daný řetězec vyhovuje reguláru.

V tomto příkladě chceme, aby uživatel zadal své telefonní číslo. Ale nevadí nám, když v něm uvede mezery. Proto jsme sestrojili regulární výraz, který nám vstup zkontroluje. (Zakomentujte inputy, které nechcete kontrolovat, a postupně si je pak vyzkoušejte.)

$input = "6027411"; // neprojde
$input = "602741147" // projde
$input = "602 741 147"; // projde

if (preg_match('#\d{3} ?\d{3} ?\d{3}#', $input))
        echo "zadný text je správné telefonní číslo";

Skvělý seriál o regulárních výrazech naleznete také na Intervalu.

Když vypisujete nějaký text od uživatele a nemáte ho ošetřený od znaků, které by vám mohly zamíchat v HTML, použijete funkci htmlspecialchars(), která převede různé šipečky ve jménech uživatelů na odpovídající HTML entity.

$nick = "<<HRACH>>";
echo "<h1>", htmlspecialchars($nick), "</h1>";

Uživateli často také nabízíte možnost vložit nějaký delší text pomocí textarea. Jenže, když tento text vypíšete, jsou zadaná odřádkování ta tam. Proto máme funkci nl2br(), která nahradí konce řádků tagy br.

Zvětšujeme, zmenšujeme

Na závěr dnešního dílu si uvedeme funkce pro zvětšování a zmenšování písmen. Základem je strtolower() a strtoupper() – převede celý text na malá písmena, respektive na velká. Funkce ucfirst() převede první písmeno na velké. Paralelou k ní je funkce lcfirst(), která převede první písmeno na malé. Bohužel, funkce lcfirst() bude dostupná zřejmě až v pozdějších vydáních PHP, a tak nám nezbývá, než si ji vytvořit sami.

if (function_exists('lcfirst') === false) {
        function lcfirst($string) {
                $string[0] = strtolower($string[0]);
                return $string;
        }
}

Poslední zajímavou funkcí je ucwords(), která převede všechna první písmena slov na velká.

Doufám, že se vám dnešní článek líbil, v případě spokojenosti a zájmu by mohlo vyjít další pokračování zaměřené na jinou tématickou oblast v PHP. K tomu se můžete vyjádřit v komentářích.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Jan ŠkrášekHonza pracuje jako webdeveloper, věnuje se vývoji Nette\Database a Nextras komponentám. Mnoho času věnuje komunitnímu portálu signály.cz. Honza je taky fanouškem XML technologií.
Web     Twitter    

Nové články

Obrázek ke článku NEWTON Media prohledá 200  milionů mediálních zpráv během sekund díky Cisco UCS

NEWTON Media prohledá 200 milionů mediálních zpráv během sekund díky Cisco UCS

Česká společnost NEWTON Media provozuje největší archiv mediálních zpráv ve střední a východní Evropě. Mezi její zákazníky patří například ministerstva, evropské instituce nebo komerční firmy z nejrůznějších oborů. NEWTON Media rozesílá svým zákazníkům každý den monitoring médií podle nastavených klíčových slov a nabízí online službu, kde lze vyhledat mediální výstupy v plném znění od roku 1996.

Reklama
Reklama
Obrázek ke článku Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Touto roční dobou, kdy je zem pokrytá barevným listím a prsty křehnou v mrazivých ránech, se obvykle těšíme na zbrusu novou verzi RAD Studia. Letos si však ale budeme muset počkat na Godzillu a Linux až do jara. Vezměme tedy za vděk alespoň updatem 2 a jelikož dle vyjádření pánů z Embarcadero se budou nové věci objevovat průběžně, pojďme se na to tedy podívat.

Obrázek ke článku Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Stále rostoucí zájem o cloudové služby i maximální důraz na pružnost, spolehlivost a bezpečnost IT vedou k výrazným inovacím v datových centrech. V infrastruktuře datových center hraje stále významnější roli software a stále častěji se lze setkat s hybridními přístupy k jejich budování i provozu.

Obrázek ke článku Konference: Mobilní technologie mají velký potenciál pro byznys

Konference: Mobilní technologie mají velký potenciál pro byznys

Firmy by se podle analytiků společnosti Gartner měly  rychle přizpůsobit skutečnosti, že mobilní technologie už zdaleka nejsou horkou novinkou, ale standardní součástí byznysu. I přesto - nebo možná právě proto - tu nabízejí velký potenciál. Kde tedy jsou ty největší příležitosti? I tomu se bude věnovat již čtvrtý ročník úspěšné konference Mobilní řešení pro business.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý