اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

شرح استخدام تقنية Regex في التحقق من النصوص


SEMO.Pa3x

الردود الموصى بها

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

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

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

ملاحظة: لن اتطرق لكيفية كتابة الـ patterns نضرة لصعوبته على البعض لانه يحتاج اساسيات ومقدمات.

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

تعريف Regular Expression:

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

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

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

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

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

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

اسم المستخدم يجب أن يكون خليط من حروف وأرقام ، والرموز التالية فقط (_-.).
البريد الإلكتروني يجب أن يكون بالشكل التالي : email_name@domain_name.top-level-domain مثال: cielblog@hotmail.com.
وسيكون شكل نموذج التسجيل كالأتي:

 

username-email.png.2c4bbc4c7d11ebbe23d1c2e8ae3a9034.png

 

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

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

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

 

أولاً: انسخ الفنكشن الآتي..

' ----------------------------------------------------------------------'
' Return True if the given string value matches the given Regex pattern '
' ----------------------------------------------------------------------'
Public Function RegexMatch(value As Variant, pattern As String) As Boolean
    If IsNull(value) Then Exit Function
    ' Using a static, we avoid re-creating the same regex object for every call '
    Static regex As Object
    ' Initialise the Regex object '
    If regex Is Nothing Then
        Set regex = CreateObject("vbscript.regexp")
        With regex
            .Global = True
            .IgnoreCase = True
            .MultiLine = True
        End With
    End If
    ' Update the regex pattern if it has changed since last time we were called '
    If regex.pattern <> pattern Then regex.pattern = pattern
    ' Test the value against the pattern '
    RegexMatch = regex.test(value)
End Function

 

لاحظو الفنكشن يتكون من براميترات 2 الأول القيمة المراد اجراء التحقق عليها والبراميتر الثاني هو معيار التحقق

ولو اردت ان اكتب تحقق لإسم المستخدم، سأكتب:

 

    If RegexMatch("semo", "^[\w_-]+$") = True Then
    
        MsgBox "Correct username", vbInformation, "CORRECT"
        
        Else
        
        MsgBox "Wrong username", vbCritical, "ERROR!"
        
    End If

 

لو اردت ان اكتب تحقق للبريد الإلكتروني سأكتب:

 

    If RegexMatch("test@gmail.com", "[A-Za-z0-9_\-.]+@[A-Za-z0-9_\-.]+\.(com|org|net)") = True Then
    
        MsgBox "Correct email", vbInformation, "CORRECT"
        
        Else
        
        MsgBox "Wrong email", vbCritical, "ERROR!"
        
    End If

 

للفائدة، google ممتلئ بالـ patterns ماعليك فقط ان تبحث قليلاً وستجد الباترن المطلوب ☺️

بالتوفيق للجميع.

  • Like 6
  • Thanks 1
رابط هذا التعليق
شارك

شكراً لك أ. أبو مهاب..

57 دقائق مضت, SEMO.Pa3x said:

للفائدة، google ممتلئ بالـ patterns ماعليك فقط ان تبحث قليلاً وستجد الباترن المطلوب ☺️

هل لديك باترونات بالعربي!.. 🤔

  • Thanks 1
رابط هذا التعليق
شارك

جزاك الله خيرا  د جسنين @SEMO.Pa3x 💐

استاذى العزيز @أبو إبراهيم الغامدي راجع هذا الروابط لعله ما تريد الى ان يشاركنا د حسنين

https://stackoverflow.com/questions/29729391/regular-expression-arabic-characters-and-numbers-only

https://en.wikipedia.org/wiki/Arabic_script_in_Unicode

بارك الله فيكم اساتذتى وجزاكم الله عنا كل خير

 

  • Like 2
رابط هذا التعليق
شارك

4 ساعات مضت, أبو إبراهيم الغامدي said:

شكراً لك أ. أبو مهاب..

هل لديك باترونات بالعربي!.. 🤔

 

العفو، حياك الله اخي أبو إبراهيم.

بالنسبة لسؤالك هل تقصد الباترن يُكتب باللغة العربية؟ او تقصد باترن للكشف ما اذا كانت اللغة عربية او لا؟

اذا كانت قصدك على كشف النص المدخل هل يتضمن حروف عربية او لا تفضل:

 

    If RegexMatch("سيمو", "[\u0600-\u06FF]") = True Then
        
        MsgBox "Is Arabic !", vbInformation, "CORRECT"
        
    Else
        
        MsgBox "Not Arabic ):", vbCritical, "ERROR!"
        
    End If

 

 

اما اذا كنت تقصد الباترن يُكتب باللغة العربية فهذا الشيء غير ممكن.

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

8 دقائق مضت, SEMO.Pa3x said:

بالنسبة لسؤالك هل تقصد الباترن يُكتب باللغة العربية؟ او تقصد باترن للكشف ما اذا كانت اللغة عربية او لا؟

اذا كانت قصدك على كشف النص المدخل هل يتضمن حروف عربية او لا تفضل:

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

رابط هذا التعليق
شارك

7 ساعات مضت, SEMO.Pa3x said:

لن اتطرق لكيفية كتابة الـ patterns نضرة لصعوبته على البعض لانه يحتاج اساسيات ومقدمات.

 

ولكن أعتقد أن الباترن هو لب الموضوع - نرجو أن تفرد لها شرحا بهذا الدرس أو بدرس مستقل وجزاكم الله خيرا

مثلا لو أردت أن يتحقق الفانكشن من وجود الأرقام أو العلامة العشرية أو علامة التنصيص المفردة والمزدوجة والفاصلة والفاصلة المنقوطة

كيف سيكون البترن هنا

وجزاكم الله خيرا

رابط هذا التعليق
شارك

وجدت هذا الرابط لشرح الرموز المستخدمة في كتابة الـ Pattrens 

https://www.tutorialspoint.com/vbscript/vbscript_reg_expressions.htm

شاكر لحضرتك هذه المعلومات القيمة 

طريقة التحقق هذه ستختصر أكواد كثيرة كنا نستخدمها لفرز وتنقية النص 

جزاكم الله خيرا

رابط هذا التعليق
شارك

وهذا هو الباترن الذي أردت "[d \W\]"

هذا يمنع وجود الأرقام أو الرموز أيا كانت داخل الاسم.

وهذا رابط آخر يشمل العديد من الـ pattrens 

https://www.vbsedit.com/html/ab0766e1-7037-45ed-aa23-706f58358c0e.asp

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

ولكن بفتحكم لهذا الموضوع اختصرت علي الطريق كثيرا

وجزاكم الله خيرا

 

رابط هذا التعليق
شارك

منذ ساعه, أبو عبدالله الحلوانى said:

وهذا هو الباترن الذي أردت "[d \W\]"

يبدو ان سعادتي جعلتني اتسرع بالحكم علي الأمور

هذا الباترن منع كل الادخال بما فيه الأحرف العربية والانكليزية والأرقام والرموز :biggrin: :blink:

نرجو توضيح كيف سيكون الباترن الذي يمنع وجود أرقام أو رموز داخل الاسماء 

 

رابط هذا التعليق
شارك

4 ساعات مضت, أبو عبدالله الحلوانى said:

يبدو ان سعادتي جعلتني اتسرع بالحكم علي الأمور

هذا الباترن منع كل الادخال بما فيه الأحرف العربية والانكليزية والأرقام والرموز :biggrin: :blink:

نرجو توضيح كيف سيكون الباترن الذي يمنع وجود أرقام أو رموز داخل الاسماء 

 

جرب وأخبرني النتيجة:

[\u0621-\u064A\u0660-\u0669a-zA-Z]+$

 

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

11 ساعات مضت, أبو عبدالله الحلوانى said:

 

ولكن أعتقد أن الباترن هو لب الموضوع - نرجو أن تفرد لها شرحا بهذا الدرس أو بدرس مستقل وجزاكم الله خيرا

مثلا لو أردت أن يتحقق الفانكشن من وجود الأرقام أو العلامة العشرية أو علامة التنصيص المفردة والمزدوجة والفاصلة والفاصلة المنقوطة

كيف سيكون البترن هنا

وجزاكم الله خيرا

 

بصراحة لا امتلك الوقت الكافي لإقدم دورة عن كتابة الpattern كما انها متوفرة في google ماعليك فقط البحث وسوف تجد مئات الدروس

اتذكر قبل 5 سنوات تعلمت هذه التقنية من دورة في اليوتيوب، تفضل هذا الرابط:

 

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

13 ساعات مضت, SEMO.Pa3x said:

جرب وأخبرني النتيجة:

لم تعمل معي ربما أكون قد طبقت الخطوات بشكل خاطئ

ولكني وضعت هذا الكود بخاصية التحقق من الصحة لمربع النص وسارت الأمور بشكل جيد وجزاكم الله خيرا

Like "*[أ-ي]" Or Is Null

 

رابط هذا التعليق
شارك

16 ساعات مضت, أبو عبدالله الحلوانى said:

لم تعمل معي ربما أكون قد طبقت الخطوات بشكل خاطئ

ولكني وضعت هذا الكود بخاصية التحقق من الصحة لمربع النص وسارت الأمور بشكل جيد وجزاكم الله خيرا


Like "*[أ-ي]" Or Is Null

 

 

للمعلومة الباترن الذي وضعته لك، يجعل التكست يقبل فقط الحروف العربية والانجليزية فقط!

ويمنع كتابة الأرقام والرموز حسب طلبك.

  • Thanks 1
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • اضف...

Important Information