لمحة جافاوية 30: فحص المدخلات 2

السلام عليكم

بصراحة أنا غير ميال بالمرة لإكمال ما بدأت
لكنكم تجدوني مضطر على هذا
لأني عندما قرأت التدوينة السابقة
وجدتها لا توصل المعنى المطلوب
لا مشاكل بالنسبة لي
لكني لا أحب أن أترك ورائي ثقوب كبيرة
لا مانع من بعض الثقوب الصغيرة
لكني لا أحب الكبيرة منها
نعود إلى فحص المدخلات
وطريقة التعابير المنتظمة
ونكمل ما بدأناه في فحص المدخلات
نأخذ بعض الأمثلة على طريقة الاستفادة من الرموز السابق ذكرها
في المرة السابقة
مثال: رقم جوال على الصيغة التالية

0599-xxxxxxxx

حيث x عبارة عن خانة رقم
نلاحظ التالي الأرقام الأولى والشرطة ثابتين
فتكون طريقة الكتابة كالتالي

0599-\d{8}

لماذا كتبت {8} ؟
لأن x تكرر في الرقم 8 مرات بالضبط

مثال2:الاسم الأول لشخص باللغة الإنجليزية
الأسماء دائماً لا تحتوي على أرقام أو رموز خاصة
اللاسم الأول دائماً يتميز بأن الحرف الأول كبير
وعلى هذا يكون التعبير المنتظم كالتالي

[A-Z]\w*

ملاحظة:
عندما نضع أياً من الرموز التي تتعلق بنوع المدخلات
دون أن نلحقها برمز من الرموز التي تتعلق بالتكرار
فإن هذا يعني أنه يجب أن تتكرر مرة واحدة
مثل الحرف الأول في المثال السابق لم نلحقه بأي رمز يتعلق البتكرار
ملاحظة أخرى:
(كثرت ملاحظاتك يا ممل -طبعاً الأخ عبده يتحدث-)
(استحملنا يا أستاذ عبده فهذه آخر واحدة -بالتأكيد أنا أرد على عبده-)
لا يمكننا أن نلحق أكثر من رمز من الرموز التي تتعلق بالتكرار
بالرموز التي تتعلق بنوع المدخلات
مثال خاطئ:

[A-Z]\w*+

الخطأ يكمن في وجود *+ متلاحقتين
مثال 3:
نريد التأكد من وجود الاسم الرباعي
طبعاً بنفس الطريقة كل اسم يتكون من الحرف الأول كبير وبعده مجموعة حروف
من المثال السابق نقوم بأخذ الصيغة
ونعدل عليها

([A-Z]\w* ){3}[A-Z]\w*

لاحظوا أنا استخدمنا القوسين () لضم مجموعة من الرموز
كما قمنا بتكرار الاسماء الثلاثة الأولى مع المسافة
واستثنينا الاسم الأخير لوحده وذلك لعدم وجود مسافة
وأظن هكذا أصبح الموضوع أسهل
بصراحة هناك صيغ أصعب مثل الإيميل والروابط التشعبية
لكني أريد أن أوصل المفهوم ولست مهتماً بالتعقيد
على العموم سأضع لكم موقع في المراجع قد يساعدكم
بقي كيف يمكننا استخدامها في جافا
نفسي تحدثني أن أؤجلها إلى المرة القادمة
لكني أعلم أني لو أجلتها فلن ترونها أبداً
لهذا كان الله في عوني ولننهي هذا الموضوع اليوم
هناك طريقتين يمكن استخدامهما
1- إذا كنت تتعامل مع الفئة String

if(munitesJField.getText().matches("\\d{2}")){
	System.out.println("yes");
}
else{
	System.out.println("no");
}

2- تتعامل مع الأخ String ,StringBuffer,StringBuilder…
كل الفئات التي ترث الفئة CharSequence

Pattern pa=Pattern.compile("\\d{2}");
CharSequence strBuff=new StringBuffer("12");
Matcher mat=pa.matcher(strBuff);
if(mat.matches()){
	System.out.println("yes");
}
else{
	System.out.println("no");
}

الموضوع عائد لك لتستخدم أياً من الطريقتين
لكني شرحت الطريقة الثانية للمحترفين راجعوا هذه اللمحة وهذه اللمحة
كما أنها تحتوي على إمكانيات كثيرة بإمكانكم الإطلاع عليها
ملاحظة أخيرة:
ربما يستغرب البعض من كوني اكتب \\ بدلاً من \
هذا بسبب أن \ عبارة عن حرف ذو دلالة خاصة في جافا
حيث يكون مدمج مع الحروف الخاصة مثل \n

وقد أنهينا كلامنا ما رأيكم أن أحدثكم عن أمنا الغولة
-عبده-ما هذا الغباء يظن أنا في الابتدائية حتى نصدقه
ممممممممممم كنت أظنه موضوعاً جيداً بعد هذا الكم الكبير من العلم
ما رأيكم في الأخ أبو رجلة مسلوخة
-عبده-متخلف
من المتخلف يا ….
-عبده-ماذا ماذا تقول لم أسمع يا ماذا؟؟
يا أحلى عبده في الدنيا
-عبده-ناس لا تحترم نفسها إلا بالعين الحمراء
(بعد ذهاب الأخ عبده)
بيني وبينكم كنت أقصد ما قلته له
-أماني-وماذا قلت له
قلت له يا ….
-أماني-عبده الحق بيقول عليك يا…
طاخ طيخ طاخ اي يا أمي
سأكون معكم في اللمحة القادمة من المستشفى
طاخ طيخ طاخ بووووووووم

المراجع:
1- مقالة بعنوان التعابير المنتظمة ولغة جافا
Regular Expressions and the Java Programming Language

http://java.sun.com/developer/technicalArticles/releases/1.4regex/

2-موقع موسوعة التعابير المنتظمة

http://regexlib.com/

تحياتي

Tags: , , , , ,

3 Responses to “لمحة جافاوية 30: فحص المدخلات 2”

  1. Salam قال:
    [A-Z]\w*
    

    الرمز * أنه لم يحصل أو حصل أي عدد من المرات
    هل ممكن يكون الواحد اسمه حرف واحد ؟!

    م. علاء
    لمحة رااائعة جداً .. إن شاء الله سيتم تطبيقها في برامجي اللاحقة
    بس الرموز شوي بتلخبط

    تحياتي :)

  2. admin قال:

    بصراحة أنا أعتقد أنه ممكن
    خصوصاً عند الصينين واليابانيين
    لكني غير متأكد
    على العموم بنخليها حرفين ولا تزعلي

    حلال عليكي بس ما تنسي تدعيلنا مع كل استخدام

    تحياتي

Leave a Reply