Karakter Dizileriyle Çalışma
Nette\Utils\Strings, çoğunlukla UTF-8 kodlamasındaki karakter dizileriyle çalışmak için yararlı fonksiyonlar içeren statik bir sınıftır.
Kurulum:
Tüm örnekler, bir takma ad oluşturulduğunu varsayar:
Harf Büyüklüğünü Değiştirme
Bu fonksiyonlar PHP mbstring
uzantısını gerektirir.
lower(string $s): string
Bir UTF-8 karakter dizisini küçük harfe dönüştürür.
upper(string $s): string
Bir UTF-8 karakter dizisini büyük harfe dönüştürür.
firstUpper(string $s): string
Bir UTF-8 karakter dizisinin ilk harfini büyük harfe dönüştürür, diğerlerini değiştirmez.
firstLower(string $s): string
Bir UTF-8 karakter dizisinin ilk harfini küçük harfe dönüştürür, diğerlerini değiştirmez.
capitalize(string $s): string
Bir UTF-8 karakter dizisindeki her kelimenin ilk harfini büyük harfe, diğerlerini küçük harfe dönüştürür.
Karakter Dizisini Düzenleme
normalize(string $s): string
Kontrol karakterlerini kaldırır, satır sonlarını \n
olarak normalleştirir, baştaki ve sondaki boş
satırları kırpar, satırlardaki sağdaki boşlukları kırpar, UTF-8'i normal NFC formuna normalleştirir.
unixNewLines(string $s): string
Satır sonlarını unix sistemlerinde kullanılan \n
karakterine dönüştürür. Satır sonları şunlardır:
\n
, \r
, \r\n
, U+2028 satır ayırıcı, U+2029 paragraf ayırıcı.
platformNewLines(string $s): string
Satır sonlarını mevcut platforma özgü karakterlere dönüştürür, yani Windows'ta \r\n
ve diğerlerinde
\n
. Satır sonları şunlardır: \n
, \r
, \r\n
, U+2028 satır ayırıcı,
U+2029 paragraf ayırıcı.
webalize(string $s, ?string $charlist=null, bool $lower=true): string
Bir UTF-8 karakter dizisini URL'lerde kullanılan forma dönüştürür, yani aksanları kaldırır ve İngiliz alfabesi harfleri ve rakamlar dışındaki tüm karakterleri tire ile değiştirir.
Başka karakterlerin de korunması gerekiyorsa, fonksiyonun ikinci parametresinde belirtilebilirler.
Üçüncü parametre ile küçük harfe dönüştürme engellenebilir.
PHP intl
uzantısını gerektirir.
trim(string $s, ?string $charlist=null): string
Bir UTF-8 karakter dizisinin başından ve sonundan boşlukları (veya ikinci parametre ile belirtilen diğer karakterleri) kırpar.
truncate(string $s, int $maxLen,
string $append=`'…'
`): string
Bir UTF-8 karakter dizisini belirtilen maksimum uzunluğa kırpar, bu sırada tam kelimeleri korumaya çalışır. Karakter dizisi kısaltılırsa, sonuna üç nokta ekler (üçüncü parametre ile değiştirilebilir).
indent(string $s, int $level=1, string
$indentationChar=`"\t"
`): string
Çok satırlı metni soldan girintiler. Girinti sayısı ikinci parametre ile, ne ile girintileneceği üçüncü parametre ile belirlenir (varsayılan değer tab karakteridir).
padLeft(string $s, int $length, string
$pad=`' '
`): string
Bir UTF-8 karakter dizisini, $pad
karakter dizisini soldan tekrarlayarak belirtilen uzunluğa tamamlar.
padRight(string $s, int $length,
string $pad=`' '
`): string
Bir UTF-8 karakter dizisini, $pad
karakter dizisini sağdan tekrarlayarak belirtilen uzunluğa tamamlar.
substring(string $s, int $start, ?int $length=null): string
$s
UTF-8 karakter dizisinin, $start
başlangıç konumu ve $length
uzunluğu ile
belirtilen bir bölümünü döndürür. $start
negatif ise, döndürülen karakter dizisi sondan
-$start
karakteri ile başlar.
reverse(string $s): string
Bir UTF-8 karakter dizisini ters çevirir.
length(string $s): int
Bir UTF-8 karakter dizisindeki karakter sayısını (bayt sayısını değil) döndürür.
Bu, grafem sayısından farklı olabilen Unicode kod noktalarının sayısıdır.
startsWith(string $haystack, string $needle): bool
$haystack
karakter dizisinin $needle
karakter dizisiyle başlayıp başlamadığını
kontrol eder.
Yerel str_starts_with()
kullanın.
endsWith(string $haystack, string $needle): bool
$haystack
karakter dizisinin $needle
karakter dizisiyle bitip bitmediğini kontrol eder.
Yerel str_ends_with()
kullanın.
contains(string $haystack, string $needle): bool
$haystack
karakter dizisinin $needle
içerip içermediğini kontrol eder.
Yerel str_contains()
kullanın.
compare(string $left, string $right, ?int $length=null): bool
İki UTF-8 karakter dizisini veya bunların bölümlerini büyük/küçük harf duyarlılığı olmadan karşılaştırır.
$length
null içeriyorsa, tüm karakter dizileri karşılaştırılır, negatif ise, karakter dizilerinin sonundan
ilgili sayıda karakter karşılaştırılır, aksi takdirde baştan ilgili sayıda karakter karşılaştırılır.
findPrefix(…$strings): string
Karakter dizilerinin ortak başlangıcını bulur. Veya ortak önek bulunamazsa boş bir karakter dizisi döndürür.
before(string $haystack, string $needle, int $nth=1): ?string
$haystack
karakter dizisinin, $needle
karakter dizisinin n'inci $nth
oluşumundan
önceki bölümünü döndürür. Veya $needle
bulunamazsa null
. $nth
negatif bir değerse,
karakter dizisinin sonundan aranır.
after(string $haystack, string $needle, int $nth=1): ?string
$haystack
karakter dizisinin, $needle
karakter dizisinin n'inci $nth
oluşumundan
sonraki bölümünü döndürür. Veya $needle
bulunamazsa null
. $nth
negatif bir değerse,
karakter dizisinin sonundan aranır.
indexOf(string $haystack, string $needle, int $nth=1): ?int
$haystack
karakter dizisindeki $needle
karakter dizisinin n'inci $nth
oluşumunun
karakter cinsinden konumunu döndürür. Veya $needle
bulunamazsa null
. $nth
negatif bir
değerse, karakter dizisinin sonundan aranır.
Kodlama
fixEncoding(string $s): string
Karakter dizisinden geçersiz UTF-8 karakterlerini kaldırır.
checkEncoding(string $s): bool
Geçerli bir UTF-8 karakter dizisi olup olmadığını kontrol eder.
Nette\Utils\Validator::isUnicode() kullanın.
toAscii(string $s): string
Bir UTF-8 karakter dizisini ASCII'ye dönüştürür, yani aksanları vb. kaldırır.
PHP intl
uzantısını gerektirir.
chr(int $code): string
Bir kod noktasından (0×0000..D7FF ve 0xE000..10FFFF aralığında bir sayı) belirli bir UTF-8 karakterini döndürür.
ord(string $char): int
Belirli bir UTF-8 karakterinin kod noktasını döndürür (0×0000..D7FF veya 0xE000..10FFFF aralığında bir sayı).
Düzenli İfadeler
Strings sınıfı, düzenli ifadelerle çalışmak için fonksiyonlar sunar. Yerel PHP fonksiyonlarının aksine, daha
anlaşılır bir API'ye, daha iyi Unicode desteğine ve hepsinden önemlisi hata tespitine sahiptirler. İfadenin derlenmesi veya
işlenmesi sırasında herhangi bir hata Nette\RegexpException
istisnası fırlatır.
split(string $subject, string $pattern, bool $captureOffset=false, bool $skipEmpty=false, int $limit=-1, bool $utf8=false): array
Bir karakter dizisini düzenli bir ifadeye göre bir diziye böler. Parantez içindeki ifadeler de yakalanacak ve döndürülecektir.
$skipEmpty
true
ise, yalnızca boş olmayan öğeler döndürülür:
$limit
belirtilmişse, yalnızca limite kadar olan alt diziler döndürülür ve karakter dizisinin geri kalanı
son öğeye yerleştirilir. –1 veya 0 limiti kısıtlama olmadığı anlamına gelir.
$utf8
true
ise, değerlendirme Unicode moduna geçer. u
değiştiricisini
belirtmişsiniz gibi.
$captureOffset
true
ise, her eşleşen oluşum için karakter dizisindeki konumu da döndürülür
(bayt cinsinden; $utf8
ayarlanmışsa karakter cinsinden). Bu, dönüş değerini, her öğenin eşleşen karakter
dizisi ve konumundan oluşan bir çift olduğu bir diziye değiştirir.
match(string $subject, string $pattern, bool $captureOffset=false, int $offset=0, bool $unmatchedAsNull=false, bool $utf8=false): ?array
Bir karakter dizisinde düzenli bir ifadeye uyan bölümü arar ve bulunan ifade ve tek tek alt ifadelerle birlikte bir dizi
veya null
döndürür.
$unmatchedAsNull
true
ise, yakalanmayan alt desenler null olarak döndürülür; aksi takdirde boş
bir karakter dizisi olarak döndürülür veya döndürülmez:
$utf8
true
ise, değerlendirme Unicode moduna geçer. u
değiştiricisini
belirtmişsiniz gibi:
$offset
parametresi, aramaya başlanacak konumu belirtmek için kullanılabilir (bayt cinsinden;
$utf8
ayarlanmışsa karakter cinsinden).
$captureOffset
true
ise, her eşleşen oluşum için karakter dizisindeki konumu da döndürülür
(bayt cinsinden; $utf8
ayarlanmışsa karakter cinsinden). Bu, dönüş değerini, her öğenin eşleşen karakter
dizisi ve ofsetinden oluşan bir çift olduğu bir diziye değiştirir:
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
Bir karakter dizisindeki düzenli bir ifadeye uyan tüm oluşumları arar ve bulunan ifade ve tek tek alt ifadelerle birlikte bir dizi dizisi döndürür.
$patternOrder
true
ise, sonuçların yapısı değişir, öyle ki ilk öğe tam desen eşleşmeleri
dizisidir, ikinci öğe parantez içindeki ilk alt desene karşılık gelen karakter dizileri dizisidir ve bu şekilde
devam eder:
$unmatchedAsNull
true
ise, yakalanmayan alt desenler null olarak döndürülür; aksi takdirde boş
bir karakter dizisi olarak döndürülür veya döndürülmez:
$utf8
true
ise, değerlendirme Unicode moduna geçer. u
değiştiricisini
belirtmişsiniz gibi:
$offset
parametresi, aramaya başlanacak konumu belirtmek için kullanılabilir (bayt cinsinden;
$utf8
ayarlanmışsa karakter cinsinden).
$captureOffset
true
ise, her eşleşen oluşum için karakter dizisindeki konumu da döndürülür
(bayt cinsinden; $utf8
ayarlanmışsa karakter cinsinden). Bu, dönüş değerini, her öğenin eşleşen karakter
dizisi ve konumundan oluşan bir çift olduğu bir diziye değiştirir:
$lazy
true
ise, fonksiyon bir dizi yerine bir Generator
döndürür, bu da büyük
karakter dizileriyle çalışırken önemli performans avantajları sağlar. Jeneratör, tüm karakter dizisini bir kerede yerine
eşleşmeleri aşamalı olarak aramanıza olanak tanır. Bu, son derece büyük girdi metinleriyle bile verimli bir şekilde
çalışmanıza olanak tanır. Ayrıca, aradığınız eşleşmeyi bulduğunuzda işlemi istediğiniz zaman kesebilirsiniz, bu da
hesaplama süresinden tasarruf sağlar.
replace(string $subject, string|array
$pattern, string|callable $replacement=''
, int $limit=-1, bool $captureOffset=false, bool
$unmatchedAsNull=false, bool $utf8=false): string
Düzenli bir ifadeye uyan tüm oluşumları değiştirir. $replacement
ya bir değiştirme karakter dizisi maskesi
ya da bir geri çağırmadır.
Fonksiyon ayrıca, ikinci parametrede pattern => replacement
şeklinde bir dizi ileterek birden fazla
değiştirme yapılmasına da olanak tanır:
$limit
parametresi yapılan değiştirme sayısını sınırlar. –1 limiti kısıtlama olmadığı
anlamına gelir.
$utf8
true
ise, değerlendirme Unicode moduna geçer. u
değiştiricisini
belirtmişsiniz gibi.
$captureOffset
true
ise, her eşleşen oluşum için karakter dizisindeki konumu da geri çağırmaya
iletilir (bayt cinsinden; $utf8
ayarlanmışsa karakter cinsinden). Bu, iletilen dizinin biçimini değiştirir,
burada her öğe eşleşen karakter dizisi ve konumundan oluşan bir çifttir.
$unmatchedAsNull
true
ise, yakalanmayan alt desenler geri çağırmaya null olarak iletilir; aksi
takdirde boş bir karakter dizisi olarak iletilir veya iletilmez: