وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

عبارات منظم پایتون – اعتبارسنجی شماره تلفن

0 26
زمان لازم برای مطالعه: 8 دقیقه


معرفی

رسیدگی به شماره تلفن های ارسالی توسط کاربر می تواند برای توسعه دهندگان یک کار چالش برانگیز باشد، به ویژه با توجه به فرمت ها و نمادهای مختلف مورد استفاده در سراسر جهان. اطمینان از معتبر بودن این شماره‌ها و فرمت‌بندی مناسب برای هر برنامه‌ای که متکی است بسیار مهم است روی اطلاعات تماس دقیق اینجاست که پایتون و ماژول عبارات منظم قدرتمند آن وارد بازی می شوند.

در این مقاله، دنیای عبارات منظم را بررسی خواهیم کرد و روش استفاده از Python را یاد خواهیم گرفت re ماژول برای تأیید شماره تلفن در برنامه های شما. ما را از بین خواهیم برد process گام به گام، بنابراین با درک کاملی از روش بررسی موثر و کارآمد اعتبارسنجی شماره تلفن کنار می‌روید.

مبانی پایتون دوباره مدول

پایتون re ماژول یک کتابخانه داخلی است که به طور خاص برای کار با عبارات منظم طراحی شده است – ابزار قدرتمندی برای جستجو، تطبیق و دستکاری متن مبتنی بر متن روی الگوها در این بخش، ما اصول اولیه را پوشش خواهیم داد re ماژولی که باید قبل از شروع اعتبارسنجی شماره تلفن ها را درک کنید (که بعداً در این مقاله نشان خواهیم داد).

این re ماژول در پایتون مجموعه ای قوی از توابع را برای کار با عبارات منظم ارائه می دهد. برای شروع استفاده از آن، فقط باید به سادگی import ماژول موجود در کد شما:

import re

چندین عملکرد ضروری ارائه شده توسط وجود دارد re ماژول برای کار با عبارات منظم. برخی از پرکاربردترین آنها هستند re.search()، re.match()، re.findall()، re.compile()، و دیگران.

re.search() کل رشته ورودی را برای مطابقت با الگوی داده شده جستجو می کند. در صورت یافتن مطابقت، شیء مطابقت را برمی گرداند None در غیر این صورت. re.match() بسیار شبیه به re.search()، اما فقط بررسی می کند که آیا الگو در ابتدای رشته ورودی مطابقت دارد یا خیر. re.findall() تمام تطابقات غیر همپوشانی الگو در رشته ورودی را به عنوان لیستی از رشته ها برمی گرداند. سرانجام، re.compile() یک الگوی عبارت منظم را در یک شی الگو جمع آوری می کند، که می تواند برای تطبیق الگوی سریعتر و کارآمدتر استفاده شود.

شخصیت ها و الگوهای خاص در عبارات منظم

عبارات منظم از کاراکترها و ساختارهای خاص برای تعریف الگوهای جستجو استفاده می کنند. در جدول زیر می توانید به برخی از مهم ترین مواردی که در این مقاله استفاده خواهیم کرد نگاهی بیندازید:

شخصیت خاص با آنچه مطابقت دارد
. هر کاراکتری به جز یک خط جدید
* صفر یا بیشتر از نویسه یا الگوی قبلی تکرار شود
+ یک یا چند تکرار از کاراکتر یا الگوی قبلی
? صفر یا یک تکرار کاراکتر یا الگوی قبلی
{m,n} نویسه/الگوی قبلی حداقل «m» بار و حداکثر «n» بار
(abc) هر کاراکتر واحد در مجموعه «(a، b، c)».
\d هر رقمی (0-9)
\s هر کاراکتر فضای خالی

با این مفاهیم اولیه پایتون re ماژول و عبارات منظم در ذهن، اکنون می توانیم حرکت کنیم روی برای اعتبارسنجی شماره تلفن ها با استفاده از این ابزار قدرتمند.

شماره تلفن ها معمولا چگونه قالب بندی می شوند؟

شماره تلفن می تواند وارد شود فرمت های مختلف بسته به روی کشور، کنوانسیون های منطقه ای و ترجیحات فردی. برای تأیید مؤثر شماره تلفن ها با استفاده از عبارات معمولی، باید حداقل درک مناسبی از مؤلفه ها و تغییرات رایج در قالب شماره تلفن داشته باشید.

ابتدا اشاره می کنیم فرمت های شماره تلفن بین المللی و محلی این فرمت بین المللی شامل کد کشور (قبل از a + نماد)، کد منطقه، و شماره محلی – به عنوان مثال، +1 (555) 123-4567. از سوی دیگر، فرمت محلی کد کشور را حذف می کند و معمولاً فقط شامل کد منطقه و شماره محلی است – (555) 123-4567.

توجه داشته باشید: هر کشوری منحصر به فرد است کد کشور که برای شناسایی شماره تلفن های آن در سطح بین المللی استفاده می شود. به عنوان مثال، ایالات متحده دارای کد کشور است +1، در حالی که بریتانیا کد کشور را دارد +44.

از سوی دیگر، مناطق یا شهرهای مختلف در داخل یک کشور، به طور خاص اختصاص داده می شوند کدهای منطقه برای کمک به شناسایی شماره تلفن از نظر جغرافیایی. کدهای منطقه بسته به طول و قالب می توانند متفاوت باشند روی کشور و منطقه

صرف نظر از فرمت شماره تلفنی که انتخاب می کنید، مواردی وجود دارد انواع جداکننده ها می توانید هنگام نوشتن شماره تلفن استفاده کنید. این بدان معناست که شماره تلفن ها را می توان با جداکننده های مختلف بین اجزایی که قبلا ذکر کردیم نوشت. برخی از رایج ترین جداکننده ها عبارتند از:

  1. فضاها+1 555 123 4567
  2. خط تیره ها+1-555-123-4567
  3. دوره ها+1.555.123.4567
  4. بدون جداکننده+15551234567
  5. پرانتز در اطراف کد منطقه+1 (555) 1234567

توجه داشته باشید که در روش‌هایی که می‌توانید شماره تلفن‌ها را در سطح بین‌المللی ضبط کنید، تنوع بیشتری وجود دارد. اما، مثال‌هایی که در اینجا نشان داده‌ایم، یک نقطه شروع عالی برای درک چگونگی ایجاد و جایگزینی عبارات منظم برای مطابقت با فرمت شماره تلفن خاص شما هستند.

چگونه یک عبارت منظم برای شماره تلفن بسازیم

برای ایجاد یک الگوی عبارات منظم موثر برای شماره تلفن، ما اجزاء را تجزیه می کنیم و تغییراتی را که قبلاً در مورد آنها صحبت شد، حساب می کنیم. ما از کاراکترها و ساختارهای ویژه استفاده می‌کنیم تا مطمئن شویم الگوی ما می‌تواند فرمت‌های شماره تلفن مختلف را مدیریت کند.

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

  1. کد کشور
    • یک جزء اختیاری
    • معمولاً قبل از علامت «+» قرار می گیرد
    • از یک یا چند رقم تشکیل شده است
  2. کد منطقه
    • محصور در پرانتز اختیاری
    • متشکل از دنباله ای از ارقام
    • طول ممکن است بسته به آن متفاوت باشد روی کشور و منطقه
  3. Local عدد
    • دنباله ای از ارقام
    • توسط جداکننده های اختیاری مانند فاصله، خط تیره یا نقطه به گروه ها تقسیم می شوند

برای اینکه الگوی خود را انعطاف پذیر کنیم، از کاراکترها و ساختارهای خاصی مانند \d (برای تطبیق ارقام)، ? (برای ساخت اجزای اختیاری)، ( -.) (برای مطابقت با جداکننده های رایج شماره تلفن)، و غیره روی.

توجه داشته باشید: اکنون زمان بسیار خوبی است تا مطمئن شوید که همه چیز را درک کرده اید شخصیت ها و الگوهای خاص می توانید در عبارات منظمی که در بالا بحث کردیم استفاده کنید. همچنین، مطمئن شوید که روش فرار کاراکترها (به خصوص بک اسلش) را درک کرده اید \ ) در عبارات منظم کار می کنند.

با در نظر گرفتن این مفاهیم، ​​بیایید در نهایت شروع به ساخت یک الگوی بیان منظم برای شماره تلفن کنیم. اول از همه، ما یک الگوی مطابق با آن ایجاد می کنیم کد کشور:

country_code_regex = "(\+\d{1,3})?"

در اینجا، یک کد کشور یک جزء اختیاری است که از 1 تا 3 رقم تشکیل شده است + جلوی آنها امضا کنید حالا بیایید یک اختیاری را در نظر بگیریم کد منطقه:

area_code_regex = "\(?\d{1,4}\)?"

ما تصمیم گرفتیم که کدهای منطقه را می توان با یک جفت پرانتز احاطه کرد و از 1 تا 4 رقم تشکیل شده است. بعد از اینکه کدهای منطقه را در نظر گرفتیم، بیایید در نهایت تمرکز کنیم روی را شماره های محلی. بگوییم که اعداد محلی از یک دنباله 7 رقمی تشکیل شده اند که یکی از جداکننده های ذکر شده را می توان بین رقم سوم و چهارم عدد قرار داد:

local_number_regex = "\d{3}(\s.-)?\d{4}"

و این تقریباً همین است! ما فقط باید عبارات منظمی را که برای هر بخش از یک شماره تلفن ایجاد کرده ایم ترکیب کنیم تا بتوان هر یک از آنها را با یکی از جداکننده های ذکر شده جدا کرد:

phone_number_regex = "(\+\d{1,3})?\s?\(?\d{1,4}\)?(\s.-)?\d{3}(\s.-)?\d{4}"

به صورت اختیاری، می توانیم این عبارت منظم را با آن احاطه کنیم شروع یک رشته (^) و انتهای یک رشته ($) لنگرها برای اطمینان از تطبیق شماره تلفن کامل، و بس، ما یک عبارت منظم داریم که با شماره تلفن مطابقت دارد:

phone_number_regex = "^(\+\d{1,3})?\s?\(?\d{1,4}\)?(\s.-)?\d{3}(\s.-)?\d{4}$"

توجه داشته باشید: به خاطر داشته باشید که این الگو فقط یک نمونه است و ممکن است بسته به آن نیاز به تنظیم داشته باشد روی فرمت های شماره تلفن خاصی که می خواهید اعتبار سنجی کنید!

نوشتن یک تابع پایتون برای اعتبارسنجی شماره تلفن

با در دست داشتن الگوی عبارت منظم برای شماره تلفن، اکنون می‌توانیم یک تابع پایتون بنویسیم تا شماره تلفن را با استفاده از re مدول. این تابع یک شماره تلفن را به عنوان ورودی می گیرد، بررسی می کند که آیا با الگوی ما مطابقت دارد یا خیر، و نتیجه اعتبار سنجی را برمی گرداند.

برای شروع، import را re ماژول در اسکریپت پایتون شما:

import re

پس از آن، اجازه دهید تابع اعتبارسنجی شماره تلفن خود را تعریف کنیم. اول از همه، باید الگوی عبارت منظم را با استفاده از کامپایل کنیم re.compile() روش:

pattern = re.compile(r"(\+\d{1,3})?\s?\(?\d{1,4}\)?(\s.-)?\d{3}(\s.-)?\d{4}")

در حال حاضر، ما می توانیم استفاده کنید re.search() یا re.match() برای تایید شماره تلفن های واقعی re.search() انتخاب خوبی برای این کار است زیرا مطابقت را در هر نقطه از رشته ورودی بررسی می کند، در حالی که re.match() فقط در ابتدا چک می کند. در اینجا، ما از re.search():

match = re.search(pattern, phone_number)

توجه داشته باشید: به طور متناوب، می توانید از re.match() برای اطمینان از اینکه الگوی شماره تلفن از ابتدای رشته ورودی شروع می شود.

اکنون، می‌توانیم منطق خود را در یک تابع جداگانه بپیچیم که برمی‌گردد True اگر مطابقت پیدا شد، و False در غیر این صورت:

def validate_phone_number(phone_number):
    match = re.search(phone_number)
    if match:
        return True
    return False

تست با اعداد مثال

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

import re

def validate_phone_number(regex, phone_number):
    match = re.search(regex, phone_number)
    if match:
        return True
    return False

pattern = re.compile(r"(\+\d{1,3})?\s?\(?\d{1,4}\)?(\s.-)?\d{3}(\s.-)?\d{4}")

test_phone_numbers = (
    "+1 (555) 123-4567",
    "555-123-4567",
    "555 123 4567",
    "+44 (0) 20 1234 5678",
    "02012345678",
    "invalid phone number"
)

for number in test_phone_numbers:
    print(f"{number}: {validate_phone_number(pattern, number)}")

این موارد زیر را به ما می دهد:

+1 (555) 123-4567: True
555-123-4567: True
555 123 4567: True
+44 (0) 20 1234 5678: True
02012345678: True
invalid phone number: False

که قابل انتظار است. این تابع باید برای اکثر فرمت های شماره تلفن رایج کار کند. اما، یک بار دیگر، بسته به روی فرمت های خاصی که می خواهید اعتبار سنجی کنید، ممکن است لازم باشد الگوی عبارت منظم و تابع اعتبارسنجی را مطابق با آن تنظیم کنید.

تکنیک های پیشرفته برای اعتبارسنجی شماره تلفن

در حالی که عملکرد اصلی تأیید شماره تلفن ما باید برای بسیاری از موارد کاربردی کار کند، می‌توانید عملکرد و خوانایی آن را با استفاده از برخی تکنیک‌های پیشرفته افزایش دهید. در اینجا چند ایده برای ارتقای اعتبار شماره تلفن خود به سطح بعدی وجود دارد:

استفاده از گروه های نامگذاری شده برای خوانایی بهتر

گروه های نامگذاری شده در عبارات منظم به شما این امکان را می دهد که نامی را به قسمت خاصی از الگو اختصاص دهید و درک و نگهداری آن را آسان تر می کند. برای ایجاد یک گروه با نام، از نحو استفاده کنید (?P<name>pattern):

pattern = re.compile(r"(?P<country_code>\+\d{1,3})?\s?\(?(?P<area_code>\d{1,4})\)?(\s.-)?(?P<local_number>\d{3}(\s.-)?\d{4})")

در اینجا، ما تمام بخش های شماره تلفن خود را در گروه های جداگانه با نام گروه بندی کردیم – country_code، area_code، و local_number.

اعتبار سنجی کدهای کشور و منطقه خاص

برای اعتبارسنجی شماره‌های تلفن با کدهای کشور و کد منطقه خاص، می‌توانید الگو را بر این اساس تغییر دهید. به عنوان مثال، برای اعتبارسنجی شماره تلفن های ایالات متحده با کدهای منطقه بین 200 و 999، می توانید از الگوی زیر استفاده کنید:

pattern = re.compile(r"(\+1)?\s?\(?(2\d{2}|(3-9)\d{2})\)?(\s.-)?\d{3}(\s.-)?\d{4}")

رسیدگی به خطاهای رایج ورودی کاربر

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

def preprocess_phone_number(phone_number):
    
    phone_number = " ".join(phone_number.split())

    
    phone_number = phone_number.replace(",", ".").replace(";", ".")

    return phone_number

def validate_phone_number(phone_number):
    phone_number = preprocess_phone_number(phone_number)
    match = pattern.search(phone_number)
    if match:
        return True
    return False

این تکنیک‌های پیشرفته می‌توانند به شما کمک کنند تا عملکرد اعتبارسنجی شماره تلفن قوی‌تر و انعطاف‌پذیرتری ایجاد کنید که فرمت‌های مختلف و خطاهای ورودی کاربر را بهتر کنترل کند.

نتیجه

اعتبار سنجی شماره تلفن برای بسیاری از برنامه هایی که متکی هستند یک کار مهم است روی اطلاعات تماس دقیق با استفاده از قدرت قدرتمند پایتون re ماژول و عبارات منظم، می توانید یک تابع اعتبارسنجی انعطاف پذیر و کارآمد برای مدیریت فرمت ها و تغییرات شماره تلفن های مختلف ایجاد کنید.

در این مقاله به بررسی اصول پایتون پرداختیم re ماژول، اجزاء و فرمت های رایج شماره تلفن، و process ساخت یک الگوی عبارت منظم برای شماره تلفن ما همچنین روش نوشتن یک تابع اعتبارسنجی شماره تلفن را با استفاده از الگوی کامپایل شده و تکنیک های پیشرفته به اشتراک گذاشته شده برای افزایش انعطاف پذیری و استحکام عملکرد نشان دادیم.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-01 02:42:10

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید