بِسَنج!
یکی از جنبههای حیاتی در توسعهی وبسایتها، اعتبارسنجی دادههای ورودی کاربر است. عدم اعتبارسنجی صحیح دادهها میتواند وبسایت را در معرض آسیبپذیریهای امنیتی گوناگونی قرار دهد. دادههایی مانند آدرس ایمیل و شمارهی موبایل از جمله اطلاعاتی هستند که بهطور معمول نیاز به اعتبارسنجی دارند.
وظیفهی شما در این تمرین پیادهسازی دو تابع پایتون به نامهای validate_email و validate_phone است که بهترتیب وظیفهی اعتبارسنجی آدرس ایمیل و شمارهی موبایل را بر عهده دارند.
هر دو تابع باید مقدار
boolبرگردانند:
True← اگر داده معتبر باشدFalse← اگر داده نامعتبر باشد
یک آدرس ایمیل معتبر باید مطابق الگوی کلی
username@domain.tldباشد و شرایط زیر را برآورده کند:
- قسمت نام کاربری (username): فقط میتواند شامل حروف انگلیسی (کوچک و بزرگ)، اعداد، کاراکتر آندراسکور (
_) و نقطه (.) باشد.- دامنه (domain): فقط میتواند شامل حروف انگلیسی (کوچک و بزرگ) و اعداد باشد.
- دامنهی سطح بالا (tld): باید یک واژهی سهحرفی متشکل از حروف انگلیسی (کوچک و بزرگ) باشد.
یک شمارهی موبایل معتبر در یکی از سه حالت زیر قابلقبول است:
- حالت اول: طول شماره دقیقاً ۱۱ کاراکتر باشد. شماره با پیششمارهی
09آغاز شود.- حالت دوم: طول شماره دقیقاً ۱۳ کاراکتر باشد. شماره با پیششمارهی
+989آغاز شود.- حالت سوم: طول شماره دقیقاً ۱۴ کاراکتر باشد. شماره با پیششمارهی
00989آغاز شود.
🎯 نمونه
>>> validate_email('sample@school.edu')
True
>>> validate_email('invalid@invalid')
False
>>> validate_phone('09215546321')
True
>>> validate_phone('093311111111')
False
💡 راهنمایی
الگوی RegEx برای ایمیل
برای اعتبارسنجی ایمیل، از الگوی زیر استفاده کنید:
r'^[a-zA-Z0-9._]+@[a-zA-Z0-9]+\.[a-zA-Z]{3}$'
^← شروع رشته[a-zA-Z0-9._]+← یک یا چند حرف، عدد، نقطه یا آندراسکور@← کاراکتر @[a-zA-Z0-9]+← یک یا چند حرف یا عدد (دامنه)\.← نقطه (با escape)[a-zA-Z]{3}← دقیقاً ۳ حرف (tld)$← پایان رشته
الگوهای RegEx برای شماره موبایل
برای اعتبارسنجی شماره موبایل، از ترکیب الگوهای زیر استفاده کنید:
# حالت اول: 09XXXXXXXXX
r'^09[0-9]{9}$'
# حالت دوم: +989XXXXXXXXX
r'^\+989[0-9]{9}$'
# حالت سوم: 00989XXXXXXXXX
r'^00989[0-9]{9}$'
کاراکتر
+در RegEx یک کاراکتر خاص است که به معنی «یک یا چند تکرار» است. اگر میخواهید به خود کاراکتر+در الگو اشاره کنید، باید از\+استفاده کنید.
راهحل با re
import re
def validate_email(email):
pattern = r'^[a-zA-Z0-9._]+@[a-zA-Z0-9]+\.[a-zA-Z]{3}$'
return bool(re.match(pattern, email))
def validate_phone(phone):
patterns = [
r'^09[0-9]{9}$',
r'^\+989[0-9]{9}$',
r'^00989[0-9]{9}$'
]
for pattern in patterns:
if re.match(pattern, phone):
return True
return False
⚠️ چالشهای حل تمرین
❌ چرا کد من در سیستم خودم کار میکند ولی در اینجا نمره صفر میگیرد؟
- شما باید فقط توابع خواسته شده را تکمیل کنید.
- از توابع
input()وprint()در کد خود استفاده نکنید.- خروجی توابع باید با
returnبرگردانده شود.- نیازی به فراخوانی توابع در کد ارسالی نیست. سیستم بهطور خودکار آنها را تست میکند.
برای تبدیل نتیجهی
re.match()بهboolاز تابعbool()استفاده کنید:
return bool(re.match(pattern, email))
✅ این تمرین را در ویرایشگر خود پیادهسازی کنید. به یاد داشته باشید که فقط کد توابع
validate_emailوvalidate_phoneرا ارسال کنید.
نمونهها
validate_email('sample@school.edu')True
validate_email('invalid@invalid')False
validate_phone('09215546321')True
validate_phone('093311111111')False
برای نوشتن پاسخ و دریافت امتیاز، ابتدا وارد حساب شوید.
ورود