أولاً، دعونا نلقي نظرة على حرفين خاصين: '^' و'$' يتم استخدامهما لمطابقة بداية السلسلة ونهايتها على التوالي. فيما يلي أمثلة:
"^The": يطابق الأحرف التي تبدأ بـ "The" String
"
.of اليأس$": يطابق السلسلة التي تنتهي بـ "من اليأس"؛
"^abc$": يطابق السلسلة التي تبدأ بـ abc وينتهي بـ abc، في الواقع، فقط abc يطابقها؛
"notice": يطابق السلاسل التي تحتوي على إشعار؛
أنت يمكنك أن ترى أنه إذا لم تستخدم الحرفين اللذين ذكرناهما (المثال الأخير)، فهذا يعني أن النمط (التعبير العادي) يمكن أن يظهر في أي مكان في السلسلة التي يتم فحصها، ولا تستخدمه للقفل على الجوانب.
هناك أيضًا عدة أحرف '*' و'+' و'؟'، والتي تُستخدم لتمثيل عدد أو ترتيب تكرارات الحرف، وهي تمثل على التوالي: "صفر أو أكثر"، و"واحد أو أكثر"، و
"صفر
أو واحد." فيما يلي بعض الأمثلة:
"ab*": يطابق سلسلة تتكون من a وصفر أو أكثر b ("a"، "ab"، "abbb"، وما إلى ذلك)؛
أعلاه، ولكن مع b واحد على الأقل ("ab"، "abbb"، وما إلى ذلك)؛
"ab؟": يتطابق مع 0 أو b واحد؛
"a?b+$": يطابق واحدًا أو 0 a متبوعًا بإضافة أكثر من واحد سلسلة تنتهي بـ b.
يمكنك أيضًا تحديد عدد الأحرف التي تظهر بين قوسين متعرجين، مثل
"ab{2}": يتطابق مع a متبوعًا باثنين b (ليس أقل) ("abb ")
; ": اثنان على الأقل b("abbb"، "abbbb"، وما إلى ذلك)؛
"ab{3,5}": 2-5 b("abbb"، "abbbb"، أو "abbbbb").
يجب عليك أيضًا لاحظ أنه يجب عليك دائمًا التحديد (على سبيل المثال، "{0,2}"، وليس "{,2}"). وبالمثل، يجب ملاحظة أن "*" و" +" و"؟" هي نفسها بعد التعليقات التوضيحية الثلاثة للنطاق، "{0،}"، و"{1،}"، و"{0,1}" على التوالي.
الآن ضع عددًا معينًا من الأحرف بين قوسين، على سبيل المثال:
"a(bc)*": يطابق a متبوعًا بـ 0 أو
"a(bc){1,5}" واحد: واحد إلى 5 "bc. "
يحتوي أيضًا على الحرف '│'، وهو ما يعادل عملية OR:
"hi│hello": يطابق سلسلة تحتوي على "hi" أو "hello"؛
"(b│cd)ef": يطابق سلسلة تحتوي على "bef" أو سلسلة "cdef";
"(a│b)*c": تطابق سلسلة تحتوي على - متعددة (بما في ذلك 0) a أو b، متبوعة بسلسلة c
('.' ) يمكن أن تمثل جميع الأحرف الفردية:
"a.[0-9]": حرف a متبوعًا برقم (ستتم مطابقة السلاسل التي تحتوي على مثل هذه السلسلة، وسيتم حذف هذا القوس في المستقبل)
"^.{ 3}$": ينتهي مع ثلاثة أحرف. المحتوى الموجود بين قوسين مربعين يطابق حرفًا واحدًا فقط.
"[ab]"
: يطابق حرفًا واحدًا أو b (مثل "a│b")؛
a' إلى 'd' (نفس تأثير "a│b│c│d" و"[abcd]");
"^[a-zA-Z]": يطابق الأحرف التي تبدأ بحرف String
"[0-9 ]%": يطابق السلاسل التي تحتوي على x%
, "[a-zA-Z0-9]$": يطابق السلاسل التي تنتهي بفاصلة متبوعة برقم أو حرف.
يمكنك أيضًا وضع الأحرف التي لا تريدها بين قوسين مربعين
كل ما عليكفعله
هو استخدام '^' كبداية للقوس (على سبيل المثال، "%[^a-zA-Z]%" يطابق علامتي نسبة مئوية وواحدة بداخلها. سلسلة غير حرفية).
تفسير، ولكن عند استخدام "^.[$()│*+?{" كحرف ذي معنى خاص، يجب عليك إضافة '' أمام هذه الأحرف، وفي php3 يجب عليك تجنب استخدام في بداية على سبيل المثال، يجب تسمية التعبير العادي "($│?[0-9]+" بـ ereg("( \$│?[0-9 ]+"، $str) (لا أفعل ذلك). أعرف ما إذا كان هو نفسه في php4)
لا تنس أن الأحرف الموجودة داخل الأقواس المربعة هي استثناء لهذه القاعدة - داخل الأقواس المربعة، جميع الأحرف الخاصة، بما في ذلك ('')، ستفقد خصائصها الخاصة ( على سبيل المثال، "[* +?{}.]" يتطابق مع السلاسل التي تحتوي على هذه الأحرف). وأيضًا، كما يخبرنا دليل regx: "إذا كانت القائمة تحتوي على ']'، فمن الأفضل استخدامها كحرف أول في القائمة حرف A (قد اتبع '^'). إذا كان يحتوي على '-'، فمن الأفضل وضعه في البداية أو النهاية، أو عند نقطة النهاية الثانية للنطاق (أي [ad-0-9] و'-' في middle سيكون صالحًا
من أجل الاكتمال، يجب أن أقوم بتغطية التسلسلات المجمعة وفئات الأحرف وفئات التكافؤ لكنني لا أريد الخوض في الكثير من التفاصيل في هذه الجوانب، ولن يلزم تغطيتها في يمكنك العثور على مزيد من المعلومات في صفحات دليل regex حول
كيفية
إنشاء نمط لمطابقة إدخال مبلغ العملة
معلومات الإدخال هي رقم يمثل المال. نعتقد أن هناك أربع طرق لتمثيل المبلغ المالي: "10000.00" و"10,000.00"، أو بدون جزء عشري، "10000" و"10,000" الآن لنبدأ في إنشاء نمط المطابقة هذا:
^[1-9][
.0 -9]*$
هذا يعني أن جميع المتغيرات يجب أن تبدأ برقم غير 0. ولكن هذا يعني أيضًا أن "0" واحد لا يمكنه اجتياز الاختبار. وفيما يلي الحل:
^(0│[1-9] [0- 9]*)$
"فقط 0 والأرقام التي تبدأ بـ 0 تتطابق"، يمكننا أيضًا السماح بإشارة سالبة قبل الرقم:
^(0│-?[1-9][0-9]*)$
هذا هو: "0 أو رقم يبدأ بـ 0 والذي قد يكون أمامه إشارة سالبة." حسنًا، حسنًا، لنكن الآن أقل صرامة ونسمح بالبدء بـ 0. الآن دعونا نسقط الإشارة السالبة، لأننا نمثل العملات المعدنية هناك. ليست هناك حاجة لاستخدامه. نحدد الآن النمط الذي سيطابق الجزء العشري:
^[0-9]+(.[0-9]+)?$
وهذا يعني أن السلسلة المطابقة يجب أن تبدأ بالعربية واحدة على الأقل. لكن لاحظ أن "10." لا يتطابق مع النمط أعلاه، فقط "10" و"10.2" يمكنهما ذلك (هل تعرف السبب)
^[0-9]+(.[0-9]{ 2 })?$
لقد حددنا أعلاه أنه يجب أن يكون هناك منزلتين عشريتين بعد العلامة العشرية. إذا كنت تعتقد أن هذا صعب للغاية، فيمكنك تغييره إلى:
^[0-9]+(.[0-9]{1. ,2})? $
سيسمح هذا بحرف أو حرفين بعد العلامة العشرية. الآن بعد أن أضفنا فواصل لسهولة القراءة (كل رقم ثالث)، يمكننا تمثيله على النحو التالي:
^[0-9]{1,3}( ,[ 0-9]{3})*(.[0-9]{1,2})?$
لا تنس علامة الجمع '+' التي يمكن استبدالها بعلامة الضرب '*' إذا كنت تريد السماح بإدخال سلاسل فارغة (لماذا؟). لا تنس أيضًا أن الشرطة المائلة العكسية '' يمكن أن تسبب أخطاء في سلاسل PHP (خطأ شائع جدًا الآن بعد أن تمكنا من تأكيد السلسلة، سنقوم الآن بإزالة الكل). commas str_replace(" , ", $money) ثم تعامل مع النوع على أنه مزدوج ويمكننا إجراء حسابات رياضية من خلاله
إنشاء تعبير عادي لفحص البريد الإلكتروني
دعنا نواصل مناقشة كيفية التحقق من عنوان البريد الإلكتروني بشكل كامل عنوان البريد الإلكتروني هناك ثلاثة أجزاء في: اسم مستخدم POP3 (كل شيء على يسار '@' )، و '@' ، واسم الخادم (هذا هو الجزء المتبقي). يمكن أن يحتوي اسم المستخدم على أحرف كبيرة وصغيرة، وأرقام عربية، ونقاط ('). ')، ناقص ('-')، والشرطة السفلية ('_') تتبع أيضًا هذه القاعدة، باستثناء الشرطة السفلية.
الآن، لا يمكن أن تبدأ أسماء المستخدمين أو تنتهي بنقاط. وينطبق الشيء نفسه على الخوادم. يجب أن يكون هناك حرف واحد على الأقل بين النقطتين المتتاليتين. الآن دعونا نلقي نظرة على كيفية كتابة نمط مطابق لاسم المستخدم:
^[_a-zA-Z0-]+$
وجود النقطتين هو غير مسموح به بعد، أضف:
^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$
ما ورد أعلاه يعني: "ابدأ بحرف أساسي واحد على الأقل. (باستثناء . عرضي)، متبوعًا بـ 0 أو أكثر من السلاسل النصية التي تبدأ بنقطة "
ولتبسيط الأمر، يمكننا استخدام eregi() بدلاً من ereg(). eregi() غير حساس لحالة الأحرف، لذا لا نحتاج إلى التحديد. نطاقان "az" و"AZ" - ما عليك سوى تحديد نطاق واحد:
^[_a-z0-9-]+(.[_a-z0-9-]+)*$
اسم الخادم بعده هو نفسه ، ولكن يجب إزالة الشرطة السفلية:
^[a-z0-9-]+(.[a-z0-9-]+)*$
تم الآن فقط استخدم "@" لتوصيل الجزأين:
^[_a -z0-9-]+ (.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$
هذا هو الكامل وضع مطابقة مصادقة البريد الإلكتروني، ما عليك سوى الاتصال بـ
eregi('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[ a-z0-9-] +)*$ ',$eamil)
لمعرفة ما إذا كان بريدًا إلكترونيًا.
الاستخدامات الأخرى للتعبيرات العادية
لاستخراج السلاسل
ereg() و eregi() لها ميزة تسمح للمستخدمين باستخراج جزء من سلسلة من خلال التعبيرات العادية (يمكنك قراءة الدليل لاستخدام محدد). سلسلة من المسار/عنوان URL لاستخراج أسماء الملفات - الكود التالي هو ما تحتاجه:
ereg("([^\/]*)$", $pathOrUrl, $regs);
echo $regs[1];
البدائل المتقدمة
ereg_replace() و eregi_replace() مفيدة جدًا أيضًا: إذا أردنا استبدال جميع العلامات السالبة المنفصلة بفواصل:
ereg_replace("[ nrt]+" , "،" ، تقليم($str));