«تفاصيل أكثر من هنا»: كيف تعرف بداية النص في PHP؟
\n\nكل مطور واجه مرة واحدة على الأقل مهمة: «هل تبدأ هذه السلسلة النصية بكلمة أو رمز أو بادئة معينة؟». قد تبدو هذه التفاصيل صغيرة، لكنها قد تحدد منطق التوجيه، التحقق من عناوين URL، التحقق من صحة البريد الإلكتروني، أو تحليل إدخال المستخدم. في PHP، كما في أي لغة أخرى، هناك عدة طرق لحل هذه المشكلة. لكن أيها الصحيح؟ وأيها الأكثر كفاءة؟ وماذا تفعل إذا كان لديك إصدار قديم من PHP؟
\n\nفي هذه المقالة، سنستعرض جميع الطرق الشائعة للتحقق من بداية النص في PHP، بدءًا من الطرق الكلاسيكية مثل substr و strpos وصولًا إلى الطريقة الحديثة str_starts_with التي ظهرت في PHP 8.0. ستتعلم ليس فقط «كيف»، بل أيضًا «لماذا» يجب اختيار طريقة معينة. هيا بنا! 🚀
لماذا التحقق من بداية النص أصلاً؟
\n\nتخيل أنك تكتب محللاً لسجلات الخادم، أو تعالج عناوين URL، أو تقوم بتصفية الملفات حسب الامتداد. أو ربما تحتاج إلى استبعاد جميع عناوين البريد الإلكتروني التي تبدأ بـ «admin@». أو التحقق مما إذا كان طلب API قد جاء بالبادئة الصحيحة. في كل هذه الحالات، تحتاج إلى شيء واحد: معرفة ما إذا كانت السلسلة النصية تحتوي على نص فرعي معين في بدايتها.
\n\nقد تبدو المهمة بسيطة، لكن عدم معرفة التفاصيل الدقيقة قد يؤدي إلى أخطاء يصعب اكتشافها. خاصة إذا استخدمت strpos دون التحقق من القيمة false. دعنا نستعرض كل طريقة بالترتيب.
الطريقة رقم 1: str_starts_with (PHP 8.0+) — الحديثة والواضحة
\n\nابتداءً من PHP 8.0، ظهرت دالة خاصة str_starts_with(). تقوم هذه الدالة بالضبط بما هو مطلوب: تتحقق مما إذا كانت السلسلة تبدأ بنص فرعي معين. وتقوم بذلك بسرعة، وبشكل قابل للقراءة، وبدون أي مفاجآت.
<?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
هذه الطريقة هي الخيار الأمثل بلا منازع إذا كان لديك PHP 8.0 أو أحدث. لكن ماذا تفعل إذا كان مشروعك لا يزال يعمل على PHP 7؟ تابع القراءة.
\n\nالطريقة رقم 2: substr — الصديق القديم أفضل من الجديد
\n\nقبل ظهور str_starts_with، كان الكثيرون يستخدمون substr لمقارنة بداية النص. الفكرة بسيطة: قص جزء من السلسلة بالطول المطلوب ومقارنته بالنص الفرعي المطلوب.
<?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
- تحتاج إلى تذكر استخدام
strlen()— من السهل ارتكاب خطأ في الطول. \n - إذا كانت السلسلة أقصر من البادئة، سترجع
substrسلسلة فارغة، وسيفشل المقارنة (لكن دون تعطل). \n - أقل قابلية للقراءة مقارنة بالبديل الحديث. \n
ومع ذلك، فهي طريقة عملية تمامًا ولن تخذلك. الأهم هو عدم نسيان استخدام المقارنة الصارمة ===.
الطريقة رقم 3: strpos — ذكية ولكنها خطيرة
\n\nطريقة كلاسيكية أخرى هي استخدام strpos(). تبحث هذه الدالة عن أول ظهور لنص فرعي