اعتبارسنجی آدرس ایمیل با regex با پایتون
# معرفی
Regular Expressions یا به اختصار RegEx، عبارتهایی از الگوها هستند که میتوانند برای جستجوی متن استفاده شوند و جایگزینها، اعتبارسنجیها، تقسیم رشتهها و موارد دیگر شوند. این الگوها از کاراکترها، ارقام و کاراکترهای خاص تشکیل شدهاند، به گونهای که الگو با بخشهای خاصی از متن که ما در جستجوی آن هستیم مطابقت داشته باشد.
عبارات منظم به طور گسترده ای برای تطبیق الگو استفاده می شوند و زبان های برنامه نویسی مختلف دارای رابط هایی برای نمایش آنها و همچنین تعامل با نتایج هستند.
در این مقاله نگاهی به نحوه اعتبارسنجی آدرس های ایمیل در پایتون با استفاده از عبارات منظم خواهیم داشت.
دوره مرتبط: دوره آموزش regex در پایتون
# عبارات منظم برای ایمیل
شایان ذکر است که چنین عبارت منظمی وجود ندارد که با هر آدرس ایمیل معتبر ممکن مطابقت داشته باشد. اگرچه، عباراتی وجود دارد که می تواند با اکثر آدرس های ایمیل معتبر مطابقت داشته باشد.
ما باید تعریف کنیم که به دنبال چه نوع فرمت آدرس ایمیل هستیم. رایج ترین فرمت ایمیل این است:
(username)@(domainname).(top-leveldomain)
بنابراین، میتوانیم آن را به الگوی نماد @ تقسیم کنیم که پیشوند را از بخش دامنه تقسیم میکند.
پیشوند نام گیرنده است - رشته ای که ممکن است شامل حروف بزرگ و کوچک، اعداد و برخی کاراکترهای خاص مانند . (نقطه)، -( خط تیره)، و _ (خط زیر).
دامنه از نام و یک دامنه سطح بالا که با نقطه از هم جدا شدهاند تشکیل شده است. نام دامنه می تواند دارای حروف بزرگ و کوچک، اعداد و نمادهای - (فاصله) باشد. علاوه بر این، نام دامنه سطح بالا باید حداقل 2 کاراکتر (یا همه حروف بزرگ یا کوچک) باشد، اما می تواند طولانی تر باشد.
به زبان ساده، عبارت Regular Expression ایمیل ما می تواند به شکل زیر باشد:
(string1)@(string2).(2+characters)
این به درستی برای آدرسهای ایمیل مانند اینها کار خواهد کرد:
name.surname@gmail.com
anonymous123@yahoo.co.uk
my_email@outlook.co
باز هم، با استفاده از همان عبارت، این آدرس های ایمیل با شکست مواجه می شوند:
johnsnow@gmail
anonymous123@...uk
myemail@outlook.
شایان ذکر است که رشته ها نباید دارای کاراکترهای خاص باشند تا مبادا دوباره فرم را بشکنند. با حسابداری برای آن موارد نیز، می توانیم این قوانین را در یک عبارت مشخص قرار دهیم که چند مورد بیشتر از نمایش اول را در نظر می گیرد:
([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+
یک کاراکتر خاص در پیشوند نمی تواند درست قبل از نماد @ باشد، و همچنین پیشوند نمی تواند با آن شروع شود، بنابراین مطمئن شدیم که حداقل یک کاراکتر الفبایی عددی قبل و بعد از هر کاراکتر خاص وجود دارد.
در مورد دامنه، یک ایمیل می تواند شامل چند دامنه سطح بالا باشد که با یک نقطه تقسیم می شوند.
بدیهی است که این regex پیچیده تر از مورد اول است، اما تمام قوانینی را که ما برای قالب ایمیل تعریف کرده ایم را پوشش می دهد. با این حال، احتمالاً ممکن است نتواند به درستی برخی از موارد را که ما به آن فکر نکردهایم تأیید کند.
مقاله پیشنهادی: بررسی خالی بودن لیست در پایتون
# اعتبارسنجی ایمیل با پایتون
ماژول re شامل کلاسها و متدهایی برای نمایش و کار با عبارات منظم در پایتون است، بنابراین ما آن را به اسکریپت خود وارد میکنیم. متدی که ما استفاده خواهیم کرد re.fullmatch(pattern, string, flags)
است. این متد فقط در صورتی شیء مطابقت را برمیگرداند که کل رشته با الگو مطابقت داشته باشد، در هر حالت دیگری None را برمیگرداند.
بیایید Regular Expression را از قبل کامپایل کنیم و یک تابع ساده تعریف کنیم که یک آدرس ایمیل را می پذیرد و از عبارت برای تأیید اعتبار آن استفاده می کند:
import re
regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+')
def isValid(email):
if re.fullmatch(regex, email):
print("Valid email")
else:
print("Invalid email")
متد re.compile() یک الگوی regex را در یک شی regex کامپایل می کند. این بیشتر به دلایل کارایی استفاده می شود، زمانی که قصد داریم الگو را بیش از یک بار تطبیق دهیم.
حال، بیایید کد را روی برخی از نمونههایی که قبلاً به آنها نگاه کردیم، آزمایش کنیم:
isValid("name.surname@gmail.com")
isValid("anonymous123@yahoo.co.uk")
isValid("anonymous123@...uk")
isValid("...@domain.us")
نتیجه:
Valid email
Valid email
Invalid email
Invalid email
عالی است، ما یک سیستم کارآمد داریم!
مقاله پیشنهادی: 8 روش برای بررسی وجود فایل در پایتون
# نتیجه گیری
برای پایان دادن به این راهنما، بیایید آنچه را که آموختهایم تجدید نظر کنیم. راههای زیادی برای اعتبارسنجی ایمیلها با استفاده از عبارات منظم وجود دارد، عمدتاً بسته به فرمت خاصی که به دنبال آن هستیم. در رابطه با آن، هیچ الگوی منحصربهفردی وجود ندارد که برای همه قالبهای ایمیل کار کند، ما فقط باید قوانینی را که میخواهیم قالب از آن پیروی کند، تعریف کنیم و بر این اساس یک الگو بسازیم.