ولكي يتم تجاهل قداسة الـ(.) في الـ Regular Expressions نقوم بوضع (\) قبلها . مثال :
$P="I love yamen";
if (ereg ("love\.\.\.\.",$P,$R)) echo $R[0];
?>
في هذا المثال لن يتم طباعة أي شي لأنه لايوجد أي كلمة تطابق (love....) لأن الـ(.) فقدت قداستها وبدأ التدقيق في الكلمة حرفاً حرفاً .
صناعة فئة حروف [xyz]
أقصد بذلك أنني احدد نطاق معين من الكلمة من الممكن أن يكون في هذا النطاق أي حروف من الفئة التي أقوم بتحديدها أو الحروف التي أقوم بتحديدها .
مثال :
$y=”how are you ? “ ;
if (ereg(“h[oe]” , $y)) echo “true”;
?>
هنا قام الـregular expression بالبحث عن أي كلمة تبدأ بالحرف h ومن ثم يتبعها أحد الحرفين o أو e مثال هذه الكلمات :
Hey – He – Hew - Homer
ولكنها لاتطابق :
Hty – Hnt - Hlay
أتمني أن تكون فهمت ما أرمي إليه
يمكننا أيضا أن نقوم بإخبار الـregular expression بأن لا يقوم باختيار كلمات تحتوي على حروف معينة وذلك فقط بإضافة ^
$y=”how are you ? “ ;
if (ereg(“h[^oe]” , $y)) echo “true”;
?>
نقوم هنا بإخبار الـre بأن يقوم بفحص الجملة فإذا وجد أي كلمة تبدأ بـh ولاتحتوي على o أو e فإنه يقوم بإعطاء true وإذا لم يجد يقوم باعطاء false
وهذا الكلام يطابق الكلمات التالية :
Hay - Hana - Hkg
ولايوافق هذه الكلمات :
Home – Hore - Here
يمكننا استعمال اختصارات لبعض الأمور فمثلاً إذا كنا نريد كلمة لاتحتوي على أي رقم كنا سنكتب كالتالى
[^123456789]
يمكننا أن نستعمل اختصار لهذا الموضوع كالتالى :
[^0-9]
وحتي إذا أردنا أن يتأكد من وجود رقم من واحد الى تسعه فقط علينا مسح الـ^
[0-9]
وأيضا الحروف الصغيرة من a الى z
[a-z]
وإذا نريد التأكد من عدم وجودها
[^a-z]
نفس القصة مع الحروف الكبيرة .
هناك اختصارات اخري لهذا الموضوع كالتالى :
الاختصار المطابق له معناه ووظيفته
\d [0-9] أي رقم من 0 الى 9
\D [^0-9] ممنوع الأرقام من 0 الى 9
\w [0-9A-Za-z_] أي رقم من 1-9 أو حروف A-Z او احرف صغيره او_
\W [^0-9A-Za-z_] عكس السابق
\s [\t\n\r] يقبل مسافة أو سطر جديد أو علامة جدولة (tab)
\S [^\t\n\r] عكس السابق
تحديد مكان الكلمة
يمكننا أن نقوم بتحديد مكان الكلمة ، اقصد بذلك أنه يمكنك تحديد مكان الكلمة إذا كانت في بداية أو نهاية النص ونستخد لهذا الأمر العلامتين (^)لتحديد المكان لبداية الجملة و ($) لنهاية الجمل .
مثال :
$y="how are you ? " ;
if (ereg("^h",$y)) echo "true";
?>
هنا سيقوم الـphp بالبحث عن في الحملة فإذا وجد الجملة تبدا بحرف h كانت قيمة الـereg تساوي true وإذا لم يجد كانت قيمة الـereg تساوي false
$y="how gone?" ;
if (ereg("^g",$y)) echo "true";
?>
في هذا المثال ستكون قيمة الـereg خطأ لأن العبارة لاتبدأ بحرفg
يمكننا فعل العكس بواسطة العلامه ($) التي عملها عكس (^) فهي تفحص إذا كان الحرف المراد فحصه موجود في نهاية الجملة
مثال :
$y="how g" ;
if (ereg("g$",$y)) echo "true";
?>
يمكننا أيضا اختيار إذا ما كان واحد من نمطين صحيحاً بواسط العلامة ( | )
$y="how g" ;
if (ereg("^y | g$",$y)) echo "true";
?>
في هذا المثال سيقوم الـPHP بفحص الجملة فإذا وافقت أحد النمطين كانت قيمة الـereg عند ذلك true .
يمكننا أيضا تحديد إذا ما كان حرف أو جملة متكررة بعدد من المرات أو مره واحدة باستخدام أحد هذه الثلاث رموز ( * ، + ، ? )
تقوم علامه الضرب بالتحقق من أن الحرف الذي يسبقها مكرر مرة أو أكثر أو غير موجود بتاتاً
مثال :
Bea*t
وتوافق :
Bet
Beat
Beaat
تقوم علامة الجمع (+) بالتأكد من وجود عنصر مرة أو أكثر :
Bea+t
وتوافق :
Beat
Beaat
Beaaaaat
أما علامة الاستفهام فتقوم بالتأكد من وجود عنصر مرة واحده أو عدم وجوده بتاتاً :
Bea?t
وتوافق :
Bet
Beat
وتأكد دائماً أن هذه الثلاث علامات مسبوقه بحرف .
وعند إرادتك مثلاً التأكد من سبق حرفين أو ثلاث بشكل تحديدي يمكنك استخدام القوسين
مثال :
(wo)?man
ويوافق :
man
woman
يمكننا التأكد من تكرر حرف بشكل معين من المرات أو أكبر من عدد معين من المرات أو أصغر من عدد معين من المرات باستخدام القوسين {x,y}
فمثلاً لو أردنا أن نتأكد من أن حرف (d) مكرر مرتين إلى أربع مرات :
d{2,4}
أما إذا أردنا أن نتأكد من أنه مكرر أكثر من مرتين إلى عدد غير محدود من المرات :
d{2,}
أما إذا أردناه أن يتكرر 4 مرات على الأكثر :
d{,4}
أو إذا اردناه أن يتكرر بعدد محدود من المرات :
d{8}
أخيراً نريد أن نلفت النظر إلى الاختصار (\b) الذي معناه أي شي ولكن ليس حرفاً (الحروف التي بين \w وبين \W تقريباً )
ملخص ما أخذناه من القواعد تجدونه في الجدول التالى :
القاعده المعني
[abc] أي حرف كان a او b او c
[^abc] أي حرف غير a و b و c
[a-z] كل الحروف من a الى z
\d\D \d للارقام و \D لغير الارقام
\w\W \w للحروف جميعها و\W لغير الحروف
\s\S \s للفراغ (space) و\S لغير الفراغ (no space)
\b الحروف التي بين \w و\W
. أي حرف
(abc) تقوم باعتبار abc كمجموعه ..
؟ حرف او مجموعة حروف مكرره مره اوغير مكرره نهائيا
+ حرف او مجموعة حروف تتكرر مره او اكثر
* حرف او مجموعة حروف تتكرر مره او اكثر او قد لاتتكرر نهائيا
{x,y} تكرير بعدد معين من المرات ..
{,y} تكرير بحد اقصي من المرات ..
{x,} تكرير بحد ادني من المرات ...
{x} تكرير بعدد معين من المرات
^ في بدايه النص
$ في نهايه النص
تعبير للتاكد من ايميل
^[_a-zA-Z0-9-]+(\.[_A-Za-z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$
شرح التعبير
الرمز الشرح
^ يجب ان يبدا النص
[_A-Za-z0-9-] أي حرف من a-z كبيرا كان او صغيرا او _او ارقام
+ وقد يكون هذا الحرف متكررا اكثر من مره
(\.[_A-Za-z0-9-]+) بالاضافه الى انه قد يتبع النقطه وحروف وارقام
* وقد لايتبعه اوقد يتبعه ويتكرر اكثر من مره
@ وبعد ذلك يكون لديه حرف ال@
[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$ وايضا نفس القواعد في النهايه
مثال :
Function mailcheck($mail,$t)
{
$T="^[_a-zA-Z0-9-]+(\.[_A-Za-z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$";
If (EREG($T,$mail))
{
$r="the mail is true";
echo $r;
}
else
{
$r="the mail is not true";
echo $r;
}
return ;
}
mailcheck("alfareees@hotmail.com",$t);
?>
eregi()
الفرق بين هذه الدالة والدالة ereg أنه غير حساسة لحالة الأحرف كبيرة أو صغيرة أي أنه يمكننا كتابة المثال السابق كالتالى :
Function mailcheck($mail,$t)
{
$T="^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$";
If (EREG($T,$mail))
{
$r="the mail is true";
echo $r;
}
else
{
$r="the mail is not true";
echo $r;
}
return ;
}
mailcheck("alfareees@hotmail.com",$t);
?>
ereg_replace()
ماذا لو أردت تحرير عبارة ما من أحرف معينة وقد تكون متكررة في جملة أوغير ذلك
لنفرض أن لدينا العبارة التالية :
Mohmed love his game …….
ونريد أن نتخلص من النقاط التي في نهاية العبارة
أو لدينا مثلاً هذا المسار :
C:\windows\desktop
ونريد أن نستبدل العلامة (\) بـ (/)
كل ذلك ممكن بواسطة الدالة ereg_replace وقواعد الـrgular expression التي أخذناها سابقاً
البنية التي نستخدمها للدالة كالتالى :
Ereg_replace(reg,string,var);
نضع في مكان reg القاعدة للـ regular expression ونضع مكان الـstring الحرف الجديد ونضع بدلاً من الـvar المتغير الذي نريد استخلاص الحروف منه .
مثال :
$path =" C:\windows\desktop";
$tell= "Mohmed love his game .....";
$newpath= Ereg_replace("[\.]","/",$path);
$newtell= Ereg_replace("\.","",$tell);
echo $newpath;
echo "
";
echo $newtell;
?>
أساليب أخري لتتبع الأخطاء
استخدام عباره echo
هو من أقدم الاساليب وكان يستخدم مثلاً في فحص بعض متغيرات نموذج فمثلاً أنت لديك نموذج يقوم بإرسال معلومات إلى النموذج وقد تستخدم في اختبار الأخطاء المنطقية التي يستصعب متابعتها في الكود
مثال :
Echo “this is : $name”;
Echo “
”;
Echo “this is : $Email”;
//كود يقوم بمعالجة معلومات المتغيرين
//طباعة المتغيرين بعد اداء عملية المعالجة ورؤية النتائج
Echo “this is after : $name”;
Echo “
”;
Echo “this is after: $Email”;
?>
فحص كود الـhtml
قد تستخدم كود جافا سكربت ويتم إخفاء الأخطاء وسط علامات التعليقات فعليك حينئذ فحص كود الـhtml لرؤية إن كان هناك بعض الأخطاء المخفية أم لا .
تجاهل الأخطاء
لنفترض أنك تعلم أن الدالة التي صنعتها بها أخطاء ولكنك تريد تجاهل هذه الأخطاء فكل ماعليك أن تقوم بوضع @ أمام الدالة لكي يتم تجاهل الخطأ عند حدوثه .
مثلاً نحن نعلم أن القسمة على الصفر من الأشياء الغير مقبولة في الـPHP وأنت صنعت دالة تقوم بالقسمة على صفر ولن يتم تنفيذها لأنها بالأصل خطأ ولكنك تريد أن يقوم PHP بتجاهلها فكل ما عليك أن تفعله هو وضع @ أمام الدالة .
مثال :
function amail ($y)
{
$y=$y/0;
return $y;
}
$s= @amail(44);
echo $s;
?>