التحقق من صحة البريد الإلكتروني في Swift في 2025: من البسيط إلى المعقد

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التحقق من صحة البريد الإلكتروني في Swift: لماذا هو مهم وكيف لا تخطئ في 2025

\n

مرحبًا أيها المطور! إذا كنت قد كتبت يومًا نموذج تسجيل أو شاشة دخول على iOS، فمن المحتمل أنك واجهت مهمة: "كيف أتحقق من أن المستخدم أدخل بريدًا إلكترونيًا حقيقيًا، وليس 'qwerty@'؟" هذا السؤال شائع جدًا لدرجة أنه حصل على آلاف المشاهدات على Stack Overflow - وليس بدون سبب. في عام 2025، عندما يتوقع المستخدمون أقصى سرعة وسهولة من التطبيقات، يمكن أن يؤدي التحقق غير الصحيح إلى فقدان العملاء.

\n

في هذه المقالة، سنناقش أفضل ممارسات التحقق من صحة البريد الإلكتروني في Swift. ستتعلم كيف لا تخترع العجلة، ولماذا التعبيرات المنتظمة ليست دائمًا حلاً سحريًا، وكيفية استخدام إمكانيات Apple لجعل الكود نظيفًا وموثوقًا. هيا بنا!

\n\n

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

\n

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

\n

في عام 2025، لا تزال معايير RFC 5321 و RFC 5322 سارية، ولكن في الممارسة العملية، نادرًا ما نتحقق من البريد الإلكتروني بنسبة 100٪ - عادةً ما يكفي اكتشاف الأخطاء الواضحة (عدم وجود @، مسافات، نطاق غير صحيح). القاعدة الأساسية: أفضل تحقق هو إرسال بريد إلكتروني للتأكيد. ومع ذلك، في مرحلة الإدخال، ما زلنا نريد تقديم ملاحظات فورية للمستخدم.

\n\n

الطريقة 1: التعبيرات المنتظمة (Regex) - الكلاسيكية

\n

الطريقة الأكثر شيوعًا هي استخدام تعبير منتظم. في Swift، يتم ذلك من خلال NSRegularExpression أو الطرق المضمنة في السلاسل النصية. دعنا نلقي نظرة على مثال عملي.

\n\n
import Foundation\n\nfunc isValidEmail(_ email: String) -> Bool {\n    // تعبير منتظم بسيط ولكنه فعال\n    let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,64}"\n    let emailPredicate = NSPredicate(format: "SELF MATCHES %@", emailRegex)\n    return emailPredicate.evaluate(with: email)\n}\n\n// مثال على الاستخدام\nprint(isValidEmail("hello@pythonlib.ru"))   // true\nprint(isValidEmail("invalid-email"))       // false\n
\n\n

الإيجابيات: سريع، واضح، سهل الصيانة.

\n

السلبيات: لا يأخذ في الاعتبار النطاقات الدولية (IDN) وبعض الرموز الخاصة القانونية. هذا يكفي لـ 95٪ من المشاريع، ولكن إذا كنت تقوم بتطوير تطبيق دولي - تابع القراءة.

\n\n

تعبير منتظم محسّن لعام 2025

\n

إذا كنت تريد أن تكون متقدمًا بخطوة، استخدم تعبيرًا يدعم المعايير الحديثة:

\n\n
func isValidEmailStrict(_ email: String) -> Bool {\n    // نمط أكثر صرامة وفقًا لـ RFC 5322 (مبسط)\n    let strictRegex = "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\\"(?:[\\\\x01-\\\\x08\\\\x0b\\\\x0c\\\\x0e-\\\\x1f\\\\x21\\\\x23-\\\\x5b\\\\x5d-\\\\x7f]|\\\\\\\\[\\\\x01-\\\\x09\\\\x0b\\\\x0c\\\\x0e-\\\\x7f])*\\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\\\x01-\\\\x08\\\\x0b\\\\x0c\\\\x0e-\\\\x1f\\\\x21-\\\\x5a\\\\x53-\\\\x7f]|\\\\\\\\[\\\\x01-\\\\x09\\\\x0b\\\\x0c\\\\x0e-\\\\x7f])+)\\\\])"\n    return NSPredicate(format: "SELF MATCHES %@", strictRegex).evaluate(with: email.lowercased())\n}\n
\n\n

لاحظ: هذا التعبير يدعم عناوين IP بين قوسين مربعين وعلامات الاقتباس. لكن استخدمه بحذر - قد يكون مفرطًا للمشاريع البسيطة.

\n\n

الطريقة 2: NSDataDetector - التحقق من Apple

\n

هل تعلم أن iOS يحتوي على كاشف بيانات مدمج؟ يمكنه التعرف على البريد الإلكتروني والروابط وأرقام الهواتف والتواريخ. وهذا لا يتطلب تعبيرات منتظمة. مفيد جدًا

المدونات

توصيات الكتب