همیشه صحت سنجی شماره تلفن ها برای ما برنامه نویسا یکم داستان داشته و خب چون بیشتر ما اصلا خودمون رو درگیر این چیزا نمی کنیم و به این فکر می کنیم که خب فوقش طرف شمارشو اشتباه میزنه دیگه و OTP سایت براش نمیره !!! و همیشه اینجوری از زیر کار در رفتیم. ولی خب من خودم سر یه پروژه ای نیاز داشتم تا با جزئیات اطلاعات مربوط به هر شماره رو دربیارم. این رجکس ها فقط فرمت شماره تلفن رو پیدا می کنن نه اینکه آیا این شماره واقعا وجود داره یا نه !
«عبارتهای منظم» (Regular Expressions) که اصطلاحاً regex یا regexp نامیده میشوند در زمان استخراج اطلاعات از هر متنی کاملاً مفید هستند. این عبارتها برای جستجو و یافتن مطابقت یک یا چند الگوی جستجوی خاص مورد استفاده قرار میگیرند. بدین ترتیب میتوان توالی خالصی از کاراکترهای ASCII یا یونیکد را یافت. زمینههای کاربرد regex از اعتبارسنجی تا تجزیه/جایگزینی رشتهها، ترجمه دادهها به قالبهای دیگر و وب اسکرپینگ متفاوت است.
توجه کنید که Match کردن با رجکس توی هر زبان متفاوته و باید داکیومنت های زبانی که دارین باهاش برنامه مینویسن رو بخونید ولی خب بطور عمده یه چیز و اینکه هر زبان برخی از قوانین رجکس رو کم و زیاد می کنه. استفاده درست از این ها مربوط میشه به زبانی که میخواید از اینا استفاده کنید. بین فایل ها، نمونه هایی از عملیات Regex Matching در زبان های برنامه نویسی مختلف قرار گرفته که میتونید استفاده کنید.
این فقط یک مثال از فرمت قابل تشخیص است و شماره تلفن فقط یک مثال رندوم است
تلفن های همراه | حالت کامل | حالت بهینه |
---|---|---|
09120034965 | ✅ | ✅ |
0912 003 4965 | ✅ | 🚫 |
0912-003-4965 | ✅ | 🚫 |
9120034965 | ✅ | ✅ |
912 003 4965 | ✅ | 🚫 |
912-003-4965 | ✅ | 🚫 |
+989120034965 | ✅ | ✅ |
+98912 003 4965 | ✅ | 🚫 |
+98912-003-4965 | ✅ | 🚫 |
989120034965 | ✅ | ✅ |
98912 003 4965 | ✅ | 🚫 |
98912-003-4965 | ✅ | 🚫 |
تمام پیش شماره های قابل تشخیص رو میتونید اینجا ببینید.
این رجکس ها بر اساس اوپراتور جدا نشده اند و فقط ایرانی بودن شماره را تشخیص می دهند.
/((0?9)|(\+?989))\d{2}\W?\d{3}\W?\d{4}/g
این رجکس سبک ترین رجکس و کارآمد ترین رجکسیه که میتونید انتخاب کنید. اگر ولیدیشنتون رو سمت client انجام میدید این رجکس رو پیشنهاد می کنم !
اما حواستون باشه این رجکس فقط فرمت کلی شماره های ایرانی رو تشخیص میده
/((0?9)|(\+?989))\d{9}/g
این رجکس ها بر اساس اوپراتور های همراه ایرانی ساخته شده اند. یعنی اگر کاربر شما پیش شماره ای وارد کرد که هیچ اوپراتور ایرانی آن را ثبت نکرده بود، این رجکس ها می توانند تشخیص دهند.
توجه: درصورتی که میخواهید رجکس خود را شخصی سازی کنید، این صفحه را ببینید
این رجکس، ترکیب تمامی رجکس های داحل این فایل است. میشه بهش گفت آش رشته. یکم سنگینه و خب خیلی پیشنهادش نمیکنم برای پروژه های سبک تر. این رجکس از یک separator یا جدا کننده بین بخش های شماره تلفن هم پشتیبانی میکه. به این صورت 0000-000-0900
/((0?9)|(\+?989))((14)|(13)|(12)|(19)|(18)|(17)|(15)|(16)|(11)|(10)|(90)|(91)|(92)|(93)|(94)|(95)|(96)|(32)|(30)|(33)|(35)|(36)|(37)|(38)|(39)|(00)|(01)|(02)|(03)|(04)|(05)|(41)|(20)|(21)|(22)|(23)|(31)|(34)|(9910)|(9911)|(9913)|(9914)|(9999)|(999)|(990)|(9810)|(9811)|(9812)|(9813)|(9814)|(9815)|(9816)|(9817)|(998))\W?\d{3}\W?\d{4}/g
ااین حالت از هیچ جدا کننده ای پشتیبانی نمیکنه !
/((0?9)|(\+?989))((14)|(13)|(12)|(19)|(18)|(17)|(15)|(16)|(11)|(10)|(90)|(91)|(92)|(93)|(94)|(95)|(96)|(32)|(30)|(33)|(35)|(36)|(37)|(38)|(39)|(00)|(01)|(02)|(03)|(04)|(05)|(41)|(20)|(21)|(22)|(23)|(31)|(34)|(9910)|(9911)|(9913)|(9914)|(9999)|(999)|(990)|(9810)|(9811)|(9812)|(9813)|(9814)|(9815)|(9816)|(9817)|(998))\d{7}/g
/((0?9)|(\+?989))((14)|(13)|(12)|(19)|(18)|(17)|(15)|(16)|(11)|(10)|(90)|(91)|(92)|(93)|(94)|(95)|(96))\W?\d{3}\W?\d{4}/g
/((0?9)|(\+?989))((14)|(13)|(12)|(19)|(18)|(17)|(15)|(16)|(11)|(10)|(90)|(91)|(92)|(93)|(94)|(95)|(96))\d{7}/g
/((0?9)|(\+?989))((32)|(30)|(33)|(35)|(36)|(37)|(38)|(39)|(00)|(01)|(02)|(03)|(04)|(05)|(41))\W?\d{3}\W?\d{4}/g
/((0?9)|(\+?989))((32)|(30)|(33)|(35)|(36)|(37)|(38)|(39)|(00)|(01)|(02)|(03)|(04)|(05)|(41))\d{7}/g
/((0?9)|(\+?989))((20)|(21)|(22)|(23))\W?\d{3}\W?\d{4}/g
/((0?9)|(\+?989))((20)|(21)|(22)|(23))\d{7}/g
/((0?9)|(\+?989))(34)\W?\d{3}\W?\d{4}/g
/((0?9)|(\+?989))(34)\d{7}/g
/((0?9)|(\+?989))(32)\W?\d{3}\W?\d{4}/g
/((0?9)|(\+?989))(32)\d{7}/g
/((0?9)|(\+?989))((9910)|(9911)|(9913)|(9914))\W?\d{3}\W?\d{4}/g
/((0?9)|(\+?989))((9910)|(9911)|(9913)|(9914))\d{7}/g
/((0?9)|(\+?989))((9999)|(999))\W?\d{3}\W?\d{4}/g
/((0?9)|(\+?989))((9999)|(999))\d{7}/g
/((0?9)|(\+?989))((9810)|(9811)|(9812)|(9813)|(9814)|(9815)|(9816)|(9817))\W?\d{3}\W?\d{4}/g
/((0?9)|(\+?989))((9810)|(9811)|(9812)|(9813)|(9814)|(9815)|(9816)|(9817))\d{7}/g
- ویکی پدیا - مقاله شماره تلفن های ایران
با ❤️, کدآقا