راه
۷ کیو· سادهمبتدیPYTHON۴ ثانیه · ۲۵۶ مگابایت

بِسَنج!

یکی از جنبه‌های حیاتی در توسعه‌ی وب‌سایت‌ها، اعتبارسنجی داده‌های ورودی کاربر است. عدم اعتبارسنجی صحیح داده‌ها می‌تواند وب‌سایت را در معرض آسیب‌پذیری‌های امنیتی گوناگونی قرار دهد. داده‌هایی مانند آدرس ایمیل و شماره‌ی موبایل از جمله اطلاعاتی هستند که به‌طور معمول نیاز به اعتبارسنجی دارند.

وظیفه‌ی شما در این تمرین پیاده‌سازی دو تابع پایتون به نام‌های validate_email و validate_phone است که به‌ترتیب وظیفه‌ی اعتبارسنجی آدرس ایمیل و شماره‌ی موبایل را بر عهده دارند.

هر دو تابع باید مقدار bool برگردانند:

  • True ← اگر داده معتبر باشد
  • False ← اگر داده نامعتبر باشد

یک آدرس ایمیل معتبر باید مطابق الگوی کلی username@domain.tld باشد و شرایط زیر را برآورده کند:

  • قسمت نام کاربری (username): فقط می‌تواند شامل حروف انگلیسی (کوچک و بزرگ)، اعداد، کاراکتر آندراسکور (_) و نقطه (.) باشد.
  • دامنه (domain): فقط می‌تواند شامل حروف انگلیسی (کوچک و بزرگ) و اعداد باشد.
  • دامنه‌ی سطح بالا (tld): باید یک واژه‌ی سه‌حرفی متشکل از حروف انگلیسی (کوچک و بزرگ) باشد.

یک شماره‌ی موبایل معتبر در یکی از سه حالت زیر قابل‌قبول است:

  • حالت اول: طول شماره دقیقاً ۱۱ کاراکتر باشد. شماره با پیش‌شماره‌ی 09 آغاز شود.
  • حالت دوم: طول شماره دقیقاً ۱۳ کاراکتر باشد. شماره با پیش‌شماره‌ی +989 آغاز شود.
  • حالت سوم: طول شماره دقیقاً ۱۴ کاراکتر باشد. شماره با پیش‌شماره‌ی 00989 آغاز شود.

🎯 نمونه

text
>>> validate_email('sample@school.edu')
True
text
>>> validate_email('invalid@invalid')
False
text
>>> validate_phone('09215546321')
True
text
>>> validate_phone('093311111111')
False

💡 راهنمایی

الگوی RegEx برای ایمیل

برای اعتبارسنجی ایمیل، از الگوی زیر استفاده کنید:

python
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 برای شماره موبایل

برای اعتبارسنجی شماره موبایل، از ترکیب الگوهای زیر استفاده کنید:

python
# حالت اول: 09XXXXXXXXX
r'^09[0-9]{9}$'

# حالت دوم: +989XXXXXXXXX
r'^\+989[0-9]{9}$'

# حالت سوم: 00989XXXXXXXXX
r'^00989[0-9]{9}$'

کاراکتر + در RegEx یک کاراکتر خاص است که به معنی «یک یا چند تکرار» است. اگر می‌خواهید به خود کاراکتر + در الگو اشاره کنید، باید از \+ استفاده کنید.


راه‌حل با re

python
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() استفاده کنید:

python
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

برای نوشتن پاسخ و دریافت امتیاز، ابتدا وارد حساب شوید.

ورود