PHP'de String İçinde Belirli Bir Kelimeyi Kontrol Etme Yöntemleri

BerkayX

Yeni Üye
Katılım
Eyl 2026
Konular
1
Mesajlar
1
Tepki puanı
0
Görüntülenme
0
1. substrın (strpos) Kullanımı
  • strpos() fonksiyonu, aranan dizeyi bulursa konumunu, bulamazsa false döndürür.
PHP:
$metin = "Merhaba dünya, PHP ile kodlama keyifli.";
$kelime = "PHP";

$bulundu = strpos($metin, $kelime);
if ($bulundu !== false) {
    echo "Kelime bulundu, konum: $bulundu";
} else {
    echo "Kelime bulunamadı.";
}
Önemli: strpos() sıfır konumunu da (başlangıç) döndürebilir; bu yüzden !== false ile karşılaştırma yapılmalıdır.

2. case‑insensitive arama (stripos)
  • stripos() fonksiyonu büyük/küçük harf duyarsızdır.
PHP:
$kelime = "php";
$bulundu = stripos($metin, $kelime);
Sadece belki de “PHP” yerine “php” ile eşleşir.

3. Düzenli İfade ile tam kelime eşlemesi (preg_match)
  • Parçalı eşleşmeleri engellemek için \b (kelime sınırı) kullanılır.
PHP:
$kelime = "PHP";
$pattern = '/\b'.preg_quote($kelime, '/').'\b/i'; // /i case‑insensitive
if (preg_match($pattern, $metin, $matches)) {
    echo "Kelime bulundu: {$matches[0]}";
}
preg_quote() ile özel karakterlerin düzenli ifadede metin olarak geçmesi sağlanır.

4. Kelime kümesi üzerinden arama (explode + in_array)
  • Kelimeleri boşluk/virgül gibi ayırıcılarla bölüp, dizi içinde arayabilirsiniz.
PHP:
$kelimeler = explode(' ', $metin); // boşlukla böl
if (in_array($kelime, $kelimeler)) {
    echo "Kelime bulundu.";
}
Bu yöntem, sadece boşlukla ayrılmış kelimelere uygundur; noktalama işaretleriyle beraber kullanmak için önceden temizleme gerekebilir.

5. Closure ile filtreleme (array_filter)
  • Özelleştirilmiş mantıkla arama yapabilirsiniz.
PHP:
$kelimeler = preg_split('/\s+/', $metin);
$bulunan = array_filter($kelimeler, fn($s) => strtolower($s) === strtolower($kelime));
if (!empty($bulunan)) {
    echo "Kelime bulundu.";
}
Bu yaklaşım, case‑insensitive ve özel karakterleri de kontrol etme esnekliği sunar.

Güvenlik ve Kötüye Kullanım Önlemleri​

  • Kullanıcıdan gelen metinde preg_match kullanıyorsanız, preg_quote() ile aranan diziyi kaçırarak regex enjeksiyonunu önleyin.
  • stripos ve strpos gibi fonksiyonlar doğrudan string arar; şüpheli girişler için önceden temizleme (htmlspecialchars, trim) yapmanız önerilir.

Yaygın Hatalar​

HataNeden?Çözüm
strpos 0 değeri kontrol edilemez0, bool false ile karıştırılır!== false ile karşılaştır
preg_match ile yanlış eşleşmeKelime sınırı yok\b kullanmak
in_array ile noktalama işaretleri"PHP," eşleşmezKelimesi temizle (str_replace) veya preg_split kullan

Soru: Bu yöntemlerden hangisini sıklıkla kullanıyorsunuz ve neden? Karşılaştığınız en büyük zorluk ne oldu?

İlgili konular​

 
Geri
En Üst