فحص بداية النص في PHP: من substr إلى str_starts_with

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

«تفاصيل أكثر من هنا»: كيف تعرف بداية النص في PHP؟

\n\n

كل مطور واجه مرة واحدة على الأقل مهمة: «هل تبدأ هذه السلسلة النصية بكلمة أو رمز أو بادئة معينة؟». قد تبدو هذه التفاصيل صغيرة، لكنها قد تحدد منطق التوجيه، التحقق من عناوين URL، التحقق من صحة البريد الإلكتروني، أو تحليل إدخال المستخدم. في PHP، كما في أي لغة أخرى، هناك عدة طرق لحل هذه المشكلة. لكن أيها الصحيح؟ وأيها الأكثر كفاءة؟ وماذا تفعل إذا كان لديك إصدار قديم من PHP؟

\n\n

في هذه المقالة، سنستعرض جميع الطرق الشائعة للتحقق من بداية النص في PHP، بدءًا من الطرق الكلاسيكية مثل substr و strpos وصولًا إلى الطريقة الحديثة str_starts_with التي ظهرت في PHP 8.0. ستتعلم ليس فقط «كيف»، بل أيضًا «لماذا» يجب اختيار طريقة معينة. هيا بنا! 🚀

\n\n

لماذا التحقق من بداية النص أصلاً؟

\n\n

تخيل أنك تكتب محللاً لسجلات الخادم، أو تعالج عناوين URL، أو تقوم بتصفية الملفات حسب الامتداد. أو ربما تحتاج إلى استبعاد جميع عناوين البريد الإلكتروني التي تبدأ بـ «admin@». أو التحقق مما إذا كان طلب API قد جاء بالبادئة الصحيحة. في كل هذه الحالات، تحتاج إلى شيء واحد: معرفة ما إذا كانت السلسلة النصية تحتوي على نص فرعي معين في بدايتها.

\n\n

قد تبدو المهمة بسيطة، لكن عدم معرفة التفاصيل الدقيقة قد يؤدي إلى أخطاء يصعب اكتشافها. خاصة إذا استخدمت strpos دون التحقق من القيمة false. دعنا نستعرض كل طريقة بالترتيب.

\n\n

الطريقة رقم 1: str_starts_with (PHP 8.0+) — الحديثة والواضحة

\n\n

ابتداءً من PHP 8.0، ظهرت دالة خاصة str_starts_with(). تقوم هذه الدالة بالضبط بما هو مطلوب: تتحقق مما إذا كانت السلسلة تبدأ بنص فرعي معين. وتقوم بذلك بسرعة، وبشكل قابل للقراءة، وبدون أي مفاجآت.

\n\n
<?php\n$url = "https://pythonlib.ru";\nif (str_starts_with($url, "https://")) {\n    echo "السلسلة تبدأ بـ https://";\n} else {\n    echo "السلسلة لا تبدأ بـ https://";\n}\n// الناتج: السلسلة تبدأ بـ https://\n?>
\n\n

لماذا هذه الطريقة رائعة؟

\n
    \n
  • ✅ الكود يُقرأ كالنص الإنجليزي العادي: «string starts with».
  • \n
  • ✅ ترجع فقط true أو false — لا حاجة لفحوصات إضافية.
  • \n
  • ✅ تعمل بشكل صحيح مع الترميزات متعددة البايت (UTF-8).
  • \n
  • ✅ حساسة لحالة الأحرف. إذا كنت بحاجة للتحقق بدون مراعاة حالة الأحرف — استخدم str_starts_with(strtolower(...)).
  • \n
\n\n

هذه الطريقة هي الخيار الأمثل بلا منازع إذا كان لديك PHP 8.0 أو أحدث. لكن ماذا تفعل إذا كان مشروعك لا يزال يعمل على PHP 7؟ تابع القراءة.

\n\n

الطريقة رقم 2: substr — الصديق القديم أفضل من الجديد

\n\n

قبل ظهور str_starts_with، كان الكثيرون يستخدمون substr لمقارنة بداية النص. الفكرة بسيطة: قص جزء من السلسلة بالطول المطلوب ومقارنته بالنص الفرعي المطلوب.

\n\n
<?php\n$string = "مرحباً بالعالم!";\n$prefix = "مرحباً";\n\nif (substr($string, 0, strlen($prefix)) === $prefix) {\n    echo "السلسلة تبدأ بـ 'مرحباً'";\n} else {\n    echo "السلسلة لا تبدأ بـ 'مرحباً'";\n}\n?>
\n\n

المزايا:

\n
    \n
  • تعمل على أي إصدار من PHP.
  • \n
  • منطقها واضح ومفهوم.
  • \n
\n

العيوب:

\n
    \n
  • تحتاج إلى تذكر استخدام strlen() — من السهل ارتكاب خطأ في الطول.
  • \n
  • إذا كانت السلسلة أقصر من البادئة، سترجع substr سلسلة فارغة، وسيفشل المقارنة (لكن دون تعطل).
  • \n
  • أقل قابلية للقراءة مقارنة بالبديل الحديث.
  • \n
\n\n

ومع ذلك، فهي طريقة عملية تمامًا ولن تخذلك. الأهم هو عدم نسيان استخدام المقارنة الصارمة ===.

\n\n

الطريقة رقم 3: strpos — ذكية ولكنها خطيرة

\n\n

طريقة كلاسيكية أخرى هي استخدام strpos(). تبحث هذه الدالة عن أول ظهور لنص فرعي

المدونات

توصيات الكتب