Stringekkel való munka
A Nette\Utils\Strings egy statikus osztály hasznos függvényekkel a stringekkel való munkához, főként UTF-8 kódolásban.
Telepítés:
Minden példa feltételezi a létrehozott aliast:
Kis- és nagybetűk váltása
Ezek a függvények a mbstring
PHP kiterjesztést igénylik.
lower(string $s): string
Átalakít egy UTF-8 stringet kisbetűssé.
upper(string $s): string
Átalakít egy UTF-8 stringet nagybetűssé.
firstUpper(string $s): string
Átalakítja egy UTF-8 string első betűjét naggyá, a többit változatlanul hagyja.
firstLower(string $s): string
Átalakítja egy UTF-8 string első betűjét kissé, a többit változatlanul hagyja.
capitalize(string $s): string
Átalakítja egy UTF-8 string minden szavának első betűjét naggyá, a többit kissé.
String módosítása
normalize(string $s): string
Eltávolítja a vezérlőkaraktereket, normalizálja a sorvégeket \n
-re, levágja a kezdő és záró üres
sorokat, levágja a sorok jobb oldali szóközét, normalizálja az UTF-8-at NFC normál formára.
unixNewLines(string $s): string
Átalakítja a sorvégeket \n
-re, amelyet Unix rendszereken használnak. A sorvégek: \n
,
\r
, \r\n
, U+2028 line separator, U+2029 paragraph separator.
platformNewLines(string $s): string
Átalakítja a sorvégeket az aktuális platformra jellemző karakterekre, azaz \r\n
-re Windows-on és
\n
-re máshol. A sorvégek: \n
, \r
, \r\n
, U+2028 line separator,
U+2029 paragraph separator.
webalize(string $s, ?string $charlist=null, bool $lower=true): string
Módosít egy UTF-8 stringet URL-ben használatos formára, azaz eltávolítja az ékezeteket, és az angol ábécé betűin és számjegyein kívül minden karaktert kötőjelre cserél.
Ha más karaktereket is meg kell őrizni, azokat a függvény második paraméterében lehet megadni.
A harmadik paraméterrel letiltható a kisbetűsre alakítás.
PHP intl
kiterjesztést igényel.
trim(string $s, ?string $charlist=null): string
Levágja a szóközöket (vagy a második paraméterben megadott egyéb karaktereket) egy UTF-8 string elejéről és végéről.
truncate(string $s, int $maxLen,
string $append=`'…'
`): string
Levág egy UTF-8 stringet a megadott maximális hosszúságra, miközben igyekszik megőrizni az egész szavakat. Ha a string lerövidül, a végére három pontot tesz (ez a harmadik paraméterrel módosítható).
indent(string $s, int $level=1, string
$indentationChar=`"\t"
`): string
Behúz egy többsoros szöveget balról. A behúzások számát a második paraméter, a behúzás karakterét a harmadik paraméter határozza meg (alapértelmezett érték a tabulátor).
padLeft(string $s, int $length, string
$pad=`' '
`): string
Kiegészít egy UTF-8 stringet a megadott hosszúságra a $pad
string ismétlésével balról.
padRight(string $s, int $length,
string $pad=`' '
`): string
Kiegészít egy UTF-8 stringet a megadott hosszúságra a $pad
string ismétlésével jobbról.
substring(string $s, int $start, ?int $length=null): string
Visszaadja a $s
UTF-8 string egy részét, amelyet a $start
kezdőpozíció és a
$length
hosszúság határoz meg. Ha a $start
negatív, a visszaadott string a végétől számított
-$start
karakterrel kezdődik.
reverse(string $s): string
Megfordít egy UTF-8 stringet.
length(string $s): int
Visszaadja a karakterek (nem bájtok) számát egy UTF-8 stringben.
Ez az Unicode kódpontok száma, amely eltérhet a grafémák számától.
startsWith(string $haystack, string $needle): bool
Megállapítja, hogy a $haystack
string a $needle
stringgel kezdődik-e.
Használja a natív str_starts_with()
függvényt.
endsWith(string $haystack, string $needle): bool
Megállapítja, hogy a $haystack
string a $needle
stringgel végződik-e.
Használja a natív str_ends_with()
függvényt.
contains(string $haystack, string $needle): bool
Megállapítja, hogy a $haystack
string tartalmazza-e a $needle
-t.
Használja a natív str_contains()
függvényt.
compare(string $left, string $right, ?int $length=null): bool
Két UTF-8 string vagy azok részeinek összehasonlítása kis- és nagybetűk figyelmen kívül hagyásával. Ha a
$length
null, a teljes stringeket hasonlítja össze, ha negatív, a stringek végétől számított megfelelő
számú karaktert hasonlítja össze, egyébként a stringek elejétől számított megfelelő számú karaktert
hasonlítja össze.
findPrefix(…$strings): string
Megkeresi a stringek közös elejét. Vagy üres stringet ad vissza, ha nem található közös prefix.
before(string $haystack, string $needle, int $nth=1): ?string
Visszaadja a $haystack
stringnek a $needle
string n-edik $nth
előfordulása előtti
részét. Vagy null
-t, ha a $needle
nem található. Negatív $nth
érték esetén a string
végétől keres.
after(string $haystack, string $needle, int $nth=1): ?string
Visszaadja a $haystack
stringnek a $needle
string n-edik $nth
előfordulása utáni
részét. Vagy null
-t, ha a $needle
nem található. Negatív $nth
érték esetén a string
végétől keres.
indexOf(string $haystack, string $needle, int $nth=1): ?int
Visszaadja a $needle
string n-edik $nth
előfordulásának pozícióját karakterekben a
$haystack
stringben. Vagy null
-t, ha a $needle
nem található. Negatív $nth
érték esetén a string végétől keres.
Kódolás
fixEncoding(string $s): string
Eltávolítja az érvénytelen UTF-8 karaktereket a stringből.
checkEncoding(string $s): bool
Megállapítja, hogy érvényes UTF-8 stringről van-e szó.
Használja a Nette\Utils\Validator::isUnicode() metódust.
toAscii(string $s): string
Átalakít egy UTF-8 stringet ASCII-ra, azaz eltávolítja az ékezeteket stb.
PHP intl
kiterjesztést igényel.
chr(int $code): string
Visszaad egy specifikus UTF-8 karaktert a kódpontból (szám a 0×0000..D7FF és 0xE000..10FFFF tartományban).
ord(string $char): int
Visszaadja egy konkrét UTF-8 karakter kódpontját (szám a 0×0000..D7FF vagy 0xE000..10FFFF tartományban).
Reguláris kifejezések
A Strings osztály függvényeket kínál a reguláris kifejezésekkel való munkához. A natív PHP függvényekkel
ellentétben érthetőbb API-val, jobb Unicode támogatással és mindenekelőtt hibadetektálással rendelkeznek. Bármilyen hiba
a kifejezés fordítása vagy feldolgozása során Nette\RegexpException
kivételt dob.
split(string $subject, string $pattern, bool $captureOffset=false, bool $skipEmpty=false, int $limit=-1, bool $utf8=false): array
Feloszt egy stringet egy tömbre reguláris kifejezés alapján. A zárójelben lévő kifejezések is rögzítésre és visszaadásra kerülnek.
Ha a $skipEmpty
true
, csak a nem üres elemek kerülnek visszaadásra:
Ha a $limit
meg van adva, csak a limitig terjedő részstringek kerülnek visszaadásra, és a string többi
része az utolsó elembe kerül. A –1 vagy 0 limit nem jelent korlátozást.
Ha az $utf8
true
, az értékelés Unicode módba vált. Hasonlóan ahhoz, mintha az u
módosítót adná meg.
Ha a $captureOffset
true
, minden előforduló egyezéshez visszaadásra kerül a pozíciója is a
stringben (bájtokban; ha az $utf8
be van állítva, akkor karakterekben). Ez megváltoztatja a visszatérési
értéket egy tömbre, ahol minden elem egy pár, amely az egyező stringből és annak pozíciójából áll.
match(string $subject, string $pattern, bool $captureOffset=false, int $offset=0, bool $unmatchedAsNull=false, bool $utf8=false): ?array
Keres a stringben egy részt, amely megfelel a reguláris kifejezésnek, és visszaad egy tömböt a talált kifejezéssel és
az egyes részkifejezésekkel, vagy null
-t.
Ha az $unmatchedAsNull
true
, a nem rögzített részminták null-ként kerülnek visszaadásra;
egyébként üres stringként vagy nem kerülnek visszaadásra:
Ha az $utf8
true
, az értékelés Unicode módba vált. Hasonlóan ahhoz, mintha az u
módosítót adná meg:
A $offset
paraméterrel megadható a keresés kezdőpozíciója (bájtokban; ha az $utf8
be van
állítva, akkor karakterekben).
Ha a $captureOffset
true
, minden előforduló egyezéshez visszaadásra kerül a pozíciója is a
stringben (bájtokban; ha az $utf8
be van állítva, akkor karakterekben). Ez megváltoztatja a visszatérési
értéket egy tömbre, ahol minden elem egy pár, amely az egyező stringből és annak eltolásából áll:
matchAll(string $subject, string $pattern, bool $captureOffset=false, int $offset=0, bool $unmatchedAsNull=false, bool $patternOrder=false, bool $utf8=false, bool $lazy=false): array|Generator
Keres a stringben minden olyan előfordulást, amely megfelel a reguláris kifejezésnek, és visszaad egy tömbökből álló tömböt a talált kifejezéssel és az egyes részkifejezésekkel.
Ha a $patternOrder
true
, az eredmények szerkezete megváltozik úgy, hogy az első elem a teljes
mintaegyezések tömbje, a második a zárójelben lévő első részmintának megfelelő stringek tömbje, és így tovább:
Ha az $unmatchedAsNull
true
, a nem rögzített részminták null-ként kerülnek visszaadásra;
egyébként üres stringként vagy nem kerülnek visszaadásra:
Ha az $utf8
true
, az értékelés Unicode módba vált. Hasonlóan ahhoz, mintha az u
módosítót adná meg:
A $offset
paraméterrel megadható a keresés kezdőpozíciója (bájtokban; ha az $utf8
be van
állítva, akkor karakterekben).
Ha a $captureOffset
true
, minden előforduló egyezéshez visszaadásra kerül a pozíciója is a
stringben (bájtokban; ha az $utf8
be van állítva, akkor karakterekben). Ez megváltoztatja a visszatérési
értéket egy tömbre, ahol minden elem egy pár, amely az egyező stringből és annak pozíciójából áll:
Ha a $lazy
true
, a függvény Generator
-t ad vissza tömb helyett, ami jelentős
teljesítményelőnyökkel jár nagy stringekkel való munka során. A generátor lehetővé teszi az egyezések fokozatos
keresését, ahelyett, hogy az egész stringet egyszerre keresné. Ez lehetővé teszi a rendkívül nagy bemeneti szövegek
hatékony feldolgozását is. Ráadásul bármikor megszakíthatja a feldolgozást, ha megtalálja a keresett egyezést, ami
számítási időt takarít meg.
replace(string $subject, string|array
$pattern, string|callable $replacement=''
, int $limit=-1, bool $captureOffset=false, bool
$unmatchedAsNull=false, bool $utf8=false): string
Lecseréli az összes olyan előfordulást, amely megfelel a reguláris kifejezésnek. A $replacement
vagy egy
helyettesítő string maszkja, vagy egy callback.
A funkció lehetővé teszi több csere végrehajtását is azáltal, hogy a második paraméterben egy
pattern => replacement
alakú tömböt adunk át:
A $limit
paraméter korlátozza a végrehajtott cserék számát. A –1 limit nem jelent korlátozást.
Ha az $utf8
true
, az értékelés Unicode módba vált. Hasonlóan ahhoz, mintha az u
módosítót adná meg.
Ha a $captureOffset
true
, minden előforduló egyezéshez a callbacknek átadásra kerül a
pozíciója is a stringben (bájtokban; ha az $utf8
be van állítva, akkor karakterekben). Ez megváltoztatja az
átadott tömb formáját, ahol minden elem egy pár, amely az egyező stringből és annak pozíciójából áll.
Ha az $unmatchedAsNull
true
, a nem rögzített részminták null-ként kerülnek átadásra a
callbacknek; egyébként üres stringként vagy nem kerülnek átadásra: