EN | CS | Přihlásit | Registrovat

Nette\String

Nette\String je statická třída s užitečnými funkcemi pro práci s řetězci. Je navržena speciálně pro práci s řetězci v kódování UTF-8.

String::checkEn­coding

Zjistí, je-li řetězec v požadovaném kódování.

public static bool checkEncoding (string $s, [string $encoding = 'UTF-8'])

Příklad:

$isUtf = String::checkEncoding($string, 'UTF-8');

String::fixEncoding

Vrací správně zakódovaný řetězec v určitém kódování. Výchozí je UTF-8, případně je změněno druhým parametrem metody.

public static string fixEncoding (string $s, [string $encoding = 'UTF-8'])

Příklad:

$correctString = String::fixEncoding($string);

String::startsWith

Vrací TRUE v případě, že řetězec $haystack začíná řetězcem $needle.

public static bool startsWith (string $haystack, string $needle)

Příklad:

$haystack = "Začíná";
$needle = "Za";
String::startsWith($haystack, $needle); // true

String::endsWith

Vrací TRUE v případě, že řetězec $haystack končí řetězcem $needle.

public static bool endsWith (string $haystack, string $needle)

Příklad:

$haystack = "Končí";
$needle = "čí";
String::endsWith($haystack, $needle); // true

String::normalize

Odstraní z textu pravostranné mezery a sjednotí oddělovače řádků.

public static string normalize (string $s)

Příklad:

$normalizedString = String::normalize($string);

String::webalize

Upraví řetězec do tvaru použitelného v URL adresách. Odstraní diakritiku a všechny znaky kromě alfanumerických nahradí oddělovačem slov -.

public static string webalize (string $s, [string $charlist = NULL])

Příklad:

echo String::webalize("krásná webová adresa"); // vypíše krasna-webova-adresa

Mají-li být zachovány i jiné znaky, lze je vyjmenovat v druhém parametru funkce.

echo String::webalize("19. 2. podtržítková_akce", "._");
// 19.-2.-podtrzitkova_akce

Vstupní řetězec musí být kódován v UTF-8. Pokud je v jiném kódování, převeďte jej funkcí iconv.

String::truncate

Ořízne řetězec na maximální délku a zachová celá slova, je-li to možné. Na konec oříznutého textu se přidá trojtečka, což lze změnit třetím nepovinným parametrem.

public static string truncate (string $s, int $maxLen, [string $append = "…"])

Příklad:

$text = 'Řekněte, jak se máte?';
echo String::truncate($text, 5); // 'Řekn…'
echo String::truncate($text, 20); // 'Řekněte, jak se…'
echo String::truncate($text, 30); // 'Řekněte, jak se máte?'

Vstupní řetězec musí být kódován v UTF-8. Pokud je v jiném kódování, převeďte jej funkcí iconv.

Změna velikosti písmen v řetězci

$s = "Dobrý den";

// převést na malá
echo String::lower($s); // dobrý den

// převést na velká
echo String::upper($s); // DOBRÝ DEN

// každé první písmeno ve slově velké
echo String::capitalize($s); // Dobrý Den

Regulární výrazy

Třída String zapouzdřuje několik užitečných funkcí pro práci s regulárními výrazy. Jejich společným důležitým rysem je, že v případě jakékoliv chyby vyhodí výjimku Nette\RegexpException.

public static array split (string $subject, string $pattern, [int $flags = 0])

Rozdělí řetězec do pole dle regulárního výrazu. Jako příznak $flag je možné uvést PREG_SPLIT_NO_EMPTY nebo PREG_SPLIT_OFFSET_CAPTURE, viz dokumentace PHP. Příklad:

$res = String::split('Prvni,  druhy,treti', '~,\s*~'); // array('Prvni', 'druhy', 'treti')
$res = String::split('Prvni, druhy,treti', '~(,)\s*~'); // array('Prvni', ',', 'druhy', ',', 'treti')

Vyhledávání výrazů:

public static array match(string $subject, string $pattern, [int $flags = 0, [int $offset = 0]])

Hledá v řetězci dle regulárního výrazu a vrátí pole s jednotlivými subvýrazy (pokud subvýrazy nepoužijete, vrátí se pole s jedním prvkem). Jako příznak $flag je možné uvést PREG_OFFSET_CAPTURE, viz dokumentace PHP. Příklad:

list($res) = String::match('Prvni,  druhy,treti', '~[a-z]+~i'); // 'Prvni'
list($res) = String::match('Prvni, druhy,treti', '~\d+~'); // NULL
public static array matchAll(string $subject, string $pattern, [int $flags = 0, [int $offset = 0]])

Hledá v řetězci všechny výskyty dle regulárního výrazu a vrátí je jako dvourozměrné pole. Jako příznak $flag je možné uvést PREG_OFFSET_CAPTURE nebo PREG_PATTERN_ORDER, viz dokumentace PHP. (Narozdíl od funkce preg_match_all je příznak PREG_SET_ORDER výchozí). Příklad:

$res = String::matchAll('Prvni,  druhy,treti', '~[a-z]+~i');
// array(0 => array('Prvni'), 1 => array('druhy'), 2 => array('treti'))

$res = String::matchAll('Prvni, druhy,treti', '~\d+~'); // array()

Záměny v řetězci:

public static string replace(string $subject, mixed $pattern, [mixed $replacement = NULL, [int $limit = -1]])

Provede v řetězci záměny dle regulárního výrazu. Druhý parametr $pattern může kromě řetězce s regulárním výrazem nabývat také hodnoty asociativního pole ve tvaru pattern => replacement. Jako třetí parametr $replacement lze uvést callback. Příklad:

echo String::replace('Prvni,  druhy,treti', '~[a-z]+~i', '*'); // '*,  *,*'
echo String::replace('Prvni, druhy,treti', array('~[a-z]+~i' => '*')); // '*, *,*'
echo String::replace('Prvni, druhy,treti', '~[a-z]+~i', function($m) { return strrev($m[0]); }); // 'invrP, yhurd,itert'

Viz také:


Login to submit a comment