تعيد str_contains($haystack, $needle) القيمة true إذا ظهر $needle في أي مكان من $haystack، وfalse في غير ذلك. أُضيفت في PHP 8.0 وهي حساسة لحالة الأحرف.
على عكس strpos()، تعيد قيمة منطقية حقيقية، فلا يوجد فخ «الوجود في الموضع 0 يبدو مثل false».
الصيغة
str_contains(string $haystack, string $needle): bool
str_starts_with(string $haystack, string $needle): bool
str_ends_with(string $haystack, string $needle): bool
أُضيفت الثلاث في PHP 8.0 وتعمل بايتًا بايتًا، لذا تتعامل مع النصوص اليابانية ونصوص UTF-8 الأخرى بشكل صحيح دون نسخة mb_.
فحص البداية أو النهاية بـ str_starts_with وstr_ends_with
الاحتواء دون حساسية لحالة الأحرف
لا توجد str_icontains(). حوّل النصين إلى أحرف صغيرة أولًا. وتحوّل mb_strtolower() أيضًا الحروف خارج ASCII، مثل É أو الكيريلية، التي تتركها strtolower() كما هي.
النص المبحوث عنه الفارغ يعيد true
يوجد النص الفارغ في كل نص، بما فيه النص الفارغ. وهذا مهم عندما يأتي النص المبحوث عنه من مربع بحث تركه المستخدم فارغًا.
التحقق من أن نصًا يحتوي أيًّا من عدة كلمات أو كلها
تأخذ str_contains() نصًا مبحوثًا عنه واحدًا. مرّ على مصفوفة منها: أعِد النتيجة حالما يتطابق أحدها في حالة «أي منها»، أو حالما يفشل أحدها في حالة «كلها».
للتحقق من أن قيمة هي أحد عناصر مصفوفة، لا جزءًا من نص، استخدم in_array().
قبل PHP 8: strpos !== false
الشيفرة التي يجب أن تعمل على PHP 7 تستخدم strpos() مع مقارنة صارمة. وتعطي الإجابة نفسها التي تعطيها str_contains()، إلا مع النص المبحوث عنه الفارغ: كانت strpos() في PHP 7 تطبع Warning: strpos(): Empty needle وتعيد false.
يطبع السطر الأخير bool(false) مع أن النص موجود، لأن php تقع في الموضع 0. واستبدال مثل هذه الفحوص بـ str_contains() من أسهل الترقيات إلى PHP 8.
الأسئلة الشائعة
كيف أتحقق من أن نصًا يحتوي كلمة في PHP؟
في PHP 8 استخدم str_contains($haystack, $needle)، التي تعيد true أو false: str_contains('Hello world', 'world') تساوي true. وفي PHP 7 استخدم strpos($haystack, $needle) !== false.
هل str_contains حساسة لحالة الأحرف؟
نعم. لفحص غير حساس لحالة الأحرف، حوّل الطرفين إلى أحرف صغيرة: str_contains(mb_strtolower($haystack), mb_strtolower($needle))، أو استخدم stripos($haystack, $needle) !== false.
لماذا تعيد str_contains القيمة true لنص فارغ؟
كل نص يحتوي النص الفارغ، لذا تعيد str_contains('abc', '') القيمة true. إذا جاء النص المبحوث عنه من مُدخلات المستخدم، فتحقق أولًا من أنه ليس فارغًا.
كيف أتحقق من أن نصًا يبدأ بشيء أو ينتهي به في PHP؟
استخدم str_starts_with($s, 'http') وstr_ends_with($s, '.pdf')، وكلتاهما أُضيفتا في PHP 8.0. ومثل str_contains()، هما حساستان لحالة الأحرف وتعيدان قيمة منطقية.