Regular Expression --2 - دروس سى شارب C# - دروس السى شارب C#
Regular Expression --2
<!-------------------><!--مقطع البدايه----->
<!--------------------><!--الخبر الرئيسي----->
[CENTER ALIGN=CENTER]بسم الله الرحمن الرحيم
استكمالا للدرس السابق والذي تحدثنا فيه عن معنى الـ Regular Expression
وكيفية إنشائها والاستفادة منها , والدوال التي تستخدم للمقارنة (Match() – Matches
() ), في هذا الدرس سنتعرف على عدد أكبر من الرموز و التي توفر الاستخدام الأقوى للـ Regular Expression
.
في العبارة
(@"J
.*d
[0-35-9]-dd-dd
") بالدرس السابق نلاحظ وجود * والتي تسمى هي و إشارة الــ + و الـ ؟ بـ quantifier
والجدول التالي يوضح معنى استخدام كل منها.
[CENTER ALIGN=CENTER]
[LEFT ALIGN=RIGHT] Quantifier
Matches :
[/LEFT ALIGN]
[/CENTER ALIGN]
[LEFT ALIGN=RIGHT]
*
| Matches 0 or more character.
|
+
| Matches 1 or more character.
|
?
| Matches 0 or 1 character
|
{n}
| Matches exactly n
charachter
|
{n,}
| Matches at least n character.
|
{
n,m
}
|
Matches between n and m (inclusive) character.
|
^
| Beginning of a string or beginning of a
newline
هنا تعني بداية السطر أو بداية النص
|
$
| End of a string before a
newline
character or at the end of the line
تدل على نهاية النص
|
[LEFT ALIGN=RIGHT]
[LEFT ALIGN=RIGHT] [/LEFT ALIGN]
الآن سنقوم بعمل Windows
Application
لبرنامج يعمل كواجهة يدخل فيها المستخدم بياناته وبواسطة الـ Regular expression
سنضع شروطا لكل مدخل منها ..
شاهد مخرجات البرنامج أولا ...!

في البرنامج الأخير بالدرس السابق كنا قد بحثنا عن substrings
التي تتطابق مع الـ Regular expression
, ولكن في هذا المثال نريد أن نتأكد من أن البيانات التي يقوم المستخدم بكتابتها تتوافق مع الـ Regular expression
التي قمنا بكتابتها وفقا لشروطنا و هذه أحد استخدامات الـ Regular Expression
الأوامر التالية مكتوبة عند حدث النقر:

عند ضغط المستخدم على ok
سيقوم البرنامج أولا في الأسطر(263 - 275) بالتأكد من أن جميع الحقول ممتلئة وغير فارغة وذلك قبل التحقق من البيانات المدخلة فإذا كان واحد أو أكثر من الحقول فارغا سوف يصدر البرنامج عندها رسالة خطأ للمستخدم (الأسطر 268-269 ).
ثم في السطر (272) تم استدعاء الدالة Focus
()من الكلاس TextBox
, و هذه الدالة تضع المؤشر على الـ TextBox
.
الذي استدعى هذه الدالة.
وبعد ذلك في السطر (274) return
التي تقوم بإنهاء حدث النقر Event Handler
أما إذا لم يكن هناك أي حقل فارغ فسيبدأ البرنامج بالتحقق من
المدخلات
, ابتداء من السطر (277):

أولا نأخذ حقل الـ Last
Input
الأسطر(277 - 286): للتأكد من صحة كتابة المعلومات الموجودة به.
هنا نلاحظ طريقة أخرى نوعاً ما في كتابة الـ Regular Expression
انظر السطر (278):
Regex.Match
(this
.textBox1.Text,@"^[A-Z][A
-Za
-z
]*$")
بكتابة اسم الكلاس في البداية Regex
يليه اسم الدالة Match
وهنا نرسل بارامترين لها الأول هو النص الذي نريد أن نجري عليه الاختبار , والثاني هي الـ Regular Expression
التي سنفرضها . ففي الشرط أتبعنا الجملة السابقة بالخاصية success
وهذه الخاصية تعود بأحد قيمتين إما true or false
,فإذا تطابقت قيمة المدخل last name
مع الـ Regular
Expression
ستعود الخاصية success
بالقيمة true
وما عدا ذلك false
, ولا حظ وجود علامة النفي ! قبل الشرط أي أنه إذا كانت نتيجة الشرط false
في هذه الحالة فقط سيتم تنفيذ الأسطر (280 - 285), أما إذا كان true
سينتقل لإجراء الاختبار على الحقل الذي يليه .
ستستمر
هذه العملية حتى يتحقق من جميع الحقول أو حتى تعود الدالة Succes
بالقيمة false
عندها سيرسل رسالة خطأ.
و سنستخدم هذا الأسلوب مع كل حقل من الحقول الأخرى ولكن الاختلاف سيكون في
البارمترين
المرسلة للدالة.
بقي أن نفصل معنى "^[A-Z][A
-Za
-z
]*$" :
الجديد فيها هي العلامتين $ و ^ الموجودة في بداية ونهاية الـRegular expression
لتفهم معنى الرمزين على سبيل المثال في خانة Last Name
سنقبل بالاسم "Osama
" ولكن لن نقبل اسما كهذا "@
#Osama
", يتم إنجاز ذلك بواسطة كتابتنا للرمز ^ في بداية الـ Regular
Expression
والعلامة $ في نهاية الـ Regular
Expression
عادة تستخدم العلامة ^ عندما نريد وضع شرط لمدخل أو نص يجب فيه الابتداء بشيء معين أو العلامة $ عندما نريد النص أن ينتهي
بشئ
معين و هي مفيدة جدا في مثل حالتنا هذه.
وبعد أن تعرفنا على معنى الرمزين ^ و $ سيكون معنى الـ Regular Expression
هنا هي:أن أول حرف يشترط أن يكون capital
[A-Z
] أما بقية الحروف فممكن تكون capital or small
[A
-Za
-z
] والعلامة * تدل على أن الحروف التالية [A
-Za
-z
]
قد يكون عددها من 0 فما أكثر.
إذنففي last
name
المفترض أن تبدأ بحرف كبير واحد ثم بقية الحروف كيفما أراد المستخدم وعددها غير محدود.
<SHAPETYPE id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><STROKE joinstyle="miter"> </STROKE> <F eqn="if lineDrawn pixelLineWidth 0"> </F> <F eqn="sum @0 1 0"> </F> <F eqn="sum 0 0 @1"> </F> <F eqn="prod @2 1 2"> </F> <F eqn="prod @3 21600 pixelWidth"> </F> <F eqn="prod @3 21600 pixelHeight"> </F> <F eqn="sum @0 0 1"> </F> <F eqn="prod @6 1 2"> </F> <F eqn="prod @7 21600 pixelWidth"> </F> <F eqn="sum @8 21600 0"> </F> <F eqn="prod @7 21600 pixelHeight"> </F> <F eqn="sum @10 21600 0"> </F> <DIVATH o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"> </DIVATH>
<LOCK aspectratio="t" v:ext="edit"> </LOCK></SHAPETYPE> <SHAPE id=_x0000_i1025 style="WIDTH: 22.5pt; HEIGHT: 22.5pt" type="#_x0000_t75" alt=""><IMAGEDATA o:href="http://www.c4arab.com/images/lessons/design/flash/flashimages/18.gif" src="file:///C:\DOCUME~1\abeer\LOCALS~1\Temp\msohtml1\01\clip_image001.gif"> </IMAGEDATA></SHAPE> ننتقل للـ First
name
:الأسطر (288 -297) والشرط الخاص به شبيه جدا بشرط الحقل السابق.