الانتقال إلى المحتوى الرئيسي
الوحدة 8 · الدرس 1 من 429/32 في الدورة~12 min
دروس الوحدة (1/4)

التحقق من صحة البريد الإلكتروني

يعد التحقق من صحة البريد الإلكتروني "بشكل صحيح" مشكلة أصعب بكثير مما تبدو: RFC 5322 وحش. من الناحية العملية، نختار نمطًا جيدًا بما فيه الكفاية يقبل الحالات الشائعة ويرفض الحالات الخاطئة بشكل واضح.

Code
Pattern: ^[\w.+-]+@[\w-]+(?:\.[\w-]+)+$
  • [\w.+-]+ -- الجزء المحلي: الحروف والأرقام، _، .، +، -.
  • @ -- فاصل.
  • [\w-]+(?:\.[\w-]+)+ -- النطاق + نطاق TLD واحد على الأقل مفصول بـ ..

ما يقبله: mario.rossi@example.com، foo+bar@sub.example.co.uk، محمي_INLINE_10.

ما يرفضه: mario@، @example.com، mario@example (بدون TLD)، مسافات.

المقايضات

النمط أعلاه لا يقبل:

  • السلاسل المقتبسة "strange (things)"@example.com (يسمح لها RFC).
  • النطاقات التي تحتوي على أحرف Unicode (\u00fcber@m\u00fcnchen.de).
  • نطاقات TLD الطويلة جدًا التي لا تمر بـ \w (مثل النطاقات الدولية).

إذا كنت في حاجة إليها، قم بتوسيع الفصل إلى \p{L} باستخدام العلامة u، أو قم بتفويض إلى مكتبة متخصصة.

المقايضات وأفضل الممارسات للتحقق من صحة البريد الإلكتروني

لا يمكن لأي تعبير عادي أن يضمن وجود عنوان بريد إلكتروني بالفعل. تؤدي الأنماط شديدة التعقيد إلى تدهور الأداء وتستبعد النطاقات غير المعتادة ولكنها صالحة. من الأفضل استخدام نمط تحقق بسيط لرفض الأخطاء المطبعية الواضحة وإرسال رمز التحقق.

جربه

تمرين#regex.m8.l1.e1
المحاولات: 0جارٍ التحميل…

التعرف على كل البريد الإلكتروني في النص. استخدم نمطًا بسيطًا: أحرف/أرقام/نقاط قبل @، مع وجود نقطة واحدة على الأقل في المجال.

جارٍ تحميل المحرر…
إظهار التلميح

قم بتوسيع الجزء المحلي إلى [\\w.+-]+ والمجال إلى [\\w-]+\\.[\\w.-]+ لقبول نطاقات TLD متعددة.

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#regex.m8.l1.e2
المحاولات: 0جارٍ التحميل…

التقط المجال (الجزء الذي يلي @) لكل بريد إلكتروني كمجموعة مسماة "dominio".

جارٍ تحميل المحرر…
إظهار التلميح

لف جزء المجال في مجموعة مسماة: (?<dominio>[\\w.-]+).

الحل متاح بعد 3 من المحاولات

التحدي الإضافي

تمرين#regex.m8.l1.e3
المحاولات: 0جارٍ التحميل…

Find the domain part of an email (everything after `@`), excluding the `@` sign using lookbehind.

جارٍ تحميل المحرر…
إظهار التلميح

استخدم نظرة خلفية إيجابية (?<=@) أمام فئة أحرف المجال.

الحل متاح بعد 3 من المحاولات