مقدمة عن التعابير القياسية Regular Expression

Nawaf Khalifahمنذ 8 سنوات

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

في هذا الدرس سأقدم نظرة عامة، ومُقدمة على التعابير القياسية Regular Expression وذلك لأهميتها الكبيرة في البرمجة.

في هذا الدرس سوف أستخدم بإذن الله لغة PHP في عمل اختبارات على الـ Regular Expression 

تعريف Regular Expression:

هو كائن يصف نمطًا من المحارف ( أو الكلمات ). 

تعريف أعمق للتعابير القياسية:

هي سلسلة من الأحرف التي تحدد نمطًا للبحث داخل النصوص (String) أو للمطابقة بين سلاسل من الأحرف.

الهدف من التعاببير القياسية هو تسهيل عمليات البحث والاستبدال داخل النصوص، وتستخدم غالبًا في عمليات التحقق (Validation) وعمليات البحث (Searching) وايضًا في الحماية.

ولتوضيح الفكرة بشكل أفضل بإمكاننا وضع مثال بسيط واقتراح الحلول له ثم بعد ذلك تبسيط الحل باستخدام التعابيير القياسية والتي سنرمز لها لاحقًا بـ RegExp.

لنفرض أننا سنقوم ببرمجة نموذج تسجيل وستكون المدخلات المطلوبة (اسم المستخدم - Username - والبريد الإلكتروني - Email -) ونريد أن نتأكد من التالي:

  1. اسم المستخدم يجب أن يكون خليط من حروف وأرقام ، والرموز التالية فقط (_-.).
  2. البريد الإلكتروني يجب أن يكون بالشكل التالي : email_name@domain_name.top-level-domain مثال: [email protected].

وسيكون شكل نموذج التسجيل كالأتي:

username-email.png.2c4bbc4c7d11ebbe23d1c2e8ae3a9034.png

الحلول المقترحة كثيرة، مثلًا لكي نتأكد أن إسم المستخدم خالٍ من المسافات والرموز نحتاج لعمل تصفية (Filter) له، والتأكد اولًا من وجود مسافات واستبدالها مثلًا بالرمز _ او ازالتها كليًا، بعد ذلك تنقيح الاسم من الرموز الممنوعة ... عملية طويلة :wacko:

اما البريد الإلكتروني يجب ان نتأكد اولًا من خلوه من المسافات ايضًا، والرموز الممنوعة في اغلب مشغلات البريد الإلكتروني، بعد ذلك التحرك قليلًا للتأكد أنّ ماقبل علامة @ هو String ومابعده String ثم التحقق أن ماقبل علامة النقطة - dot - هو String ومابعده هو top-level-domain ... عملية أطول :wacko: 

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

اولًا سنشرح بناء الـ RegExp


/ RegExp /

هذا المتعارف عليه تقريبًا في كل لغات البرمجة، وهو وضع / - Slash - ثم كتابة ال RegExp بعد ذلك الاغلاق بـ /  - Slash -. يمكن أيضًا استخدام طرائق اخرى مع PHP.

# RegExp #
! RegExp !
@ RegExp @

هذه طرائق أخرى لإستخدامه مع لغة PHP.

لاحظ الدالة المنفذة للـ RegExp في لغة PHP هي عائلة دوال Preg

والأكثر استخدامًا هي دالة preg_match ، والتي تقوم بعمل مطابقة بين النمط (Pattren) المطلوب والنص المدخل (Subject) وهي ماسوف نستخدمه في حل مكشلتنا.


preg_match ($pattren , $subject)

ثانيًا سنضع جدول بالأنماط المدعومة في الـ RegExp وهي متفق عليها تقريبًا:

table-req.thumb.jpg.48eb25851ab0de9abb8cc54271197f8d.jpg

ثالثًا تطبيق ماتعلمناه في مشكلتنا

ليكون فهم الـ RegExp اعمق وشامل، سنقوم بتطبيق دالة preg_match وماتعلمناه من اساسيات في حل مكشلتنا.


<?php
$username = "Shino";
$email    = "[email protected]";

// Validate 
if (!preg_match('/^[\w_-]+$/', $username)) {
	echo "Please enter unique username. e.g. cielblog.";
} else {
	echo "Valid username.";
}
	
if (!preg_match('/[A-Za-z0-9_\-.]+@[A-Za-z0-9_\-.]+\.(com|org|net)/', $email)) {
	echo "";
} else {
	echo "Valid email.";
}
	

لاحظ في الكود اعلاه ستكون النتيجة ايجابية لان المدخلات كلها تطابق الفحص!

لاحظ استخدمنا علامة النفي ( ! ) في التحققات، وهذا يعني إن لم يتحقق الفحص اطبع الرسالة التالية، وان تحقق اطبع الرسالة التالية.

ولأرسخ الفكرة ساقوم بشرح مختصر لأحدى الانماط المستخدمة، وسأترك الأخرى لكم :wub:

Capture.JPG.be78fcb63ea969533d4720eacc8029cc.JPG

Capture.JPG.89fed4377d90277f583bd7b3e1e2df8e.JPG

كما هو موضح بالصورة أعلاه، سيتم التحقق فيما اذا كانت المجموعة الأولى مكونة من الحروف A الى Z او a الى z او 0 الى 9 او الرموز _ - . ثم بعد ذلك علامة (at) بعد ذلك مجموعة مابعد علامة (at) تليها احدى الخيارات com او org او net.

مصادر المعلومات المدرجة بهذا المقال:

هذه هي التعابير القياسية بكل بساطة، أتمنى أن يكون هذا الدرس - قابل للفهم - وخفيف ومفيد ايضًا.

تحياتي لكم.

كلمات دليلية:
2
إعجاب
14127
مشاهدات
0
مشاركة
0
متابع
متميز
محتوى رهيب

التعليقات (2)

Omniyyah:

مقال مفيد

التعابير القياسية تقلل الكثير من الوقت والجهد ولكن عملية تعلمها معقدة بعض الشيء ( بالنسبة لي ) 

AbdullaScript:

شخصيا لا احبذ عمل رقولار اكسبرشن للايميلات لاسباب كثيرة اهمها عدم امكانية حصر الدومين اكستنشن دوت كوم ام دوت نت ام دوت اورق ليس بالامر الكافي لهذا الامر ..

 

الحل الوحيد الممكن عمله هو عملية الvalidation بعد التسجيل لتفعيل الحساب مثلا.

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !