آموزش اعتبارسنجی (Validation) شماره موبایل و کد ملی با Regex
🚀 نقشه راه اعتبارسنجی موبایل و کد ملی با رگولار اکسپرشن (Regex)
✅ اعتبارسنجی شماره موبایل
- ▪ ساختار: 09XX-XXX-XXXX
- ▪ Regex پایه: `^09d{9}$`
- ▪ Regex پیشرفته: شامل پیششماره (+98) و یا بدون صفر اول
- ▪ چالش: فرمتهای متفاوت، خطوط ثابت
👤 اعتبارسنجی کد ملی
- ▪ ساختار: 10 رقم
- ▪ Regex پایه: `^d{10}$`
- ▪ Regex پیشرفته: همراه با الگوریتم کنترلی
- ▪ چالش: رقم کنترل، کد ملیهای غیرمعتبر (مثل ۱۲۳۴۵۶۷۸۹۰)
🛠️ ابزارهای کمکی: توضیحات کامل Regex، مثالهای عملی، عیبیابی سریع و راهحلهای هوشمندانه برای هر برنامهنویس.
با ما همراه باش تا دادههات رو مثل یک حرفهای اعتبارسنجی کنی!
سلام رفیق برنامهنویس! اگه سر و کارت با فرمها و اطلاعات کاربراست، حتماً بارها با چالش اعتبارسنجی (Validation) روبهرو شدی. اینکه چطور مطمئن بشی شماره موبایلی که کاربر وارد کرده واقعیه یا کد ملیش درست و معتبره، یه دغدغه همیشگیه. فکرش رو بکن، اگه یه دیتابیس پر از اطلاعات غلط و ناقص داشته باشی، چه بلایی سر پروژهت میاد؟ از خطا تو فرایند ثبتنام گرفته تا مشکلات امنیتی و حتی از دست دادن مشتری! دقیقاً همینجاست که رگولار اکسپرشن (Regex) مثل یک قهرمان وارد میشه و کار رو برات حسابی راحت میکنه. تو این مقاله قراره گام به گام بریم سراغ اعتبارسنجی دو تا از مهمترین فیلدهای اطلاعاتی تو ایران: شماره موبایل و کد ملی. پس اگه دنبال یه راه حل قوی و مطمئنی تا اطلاعاتت رو حسابی فیلتر کنی و دیتای تمیز داشته باشی، جای درستی اومدی.
برای اینکه کارت حسابی راه بیفته و ابزارهای مورد نیازت همیشه دم دستت باشه، یه سر به فروشگاه ابزارها بزن، کلی چیزای خفن و کاربردی پیدا میکنی!
اگه هم سوالی داشتی یا نیاز به راهنمایی بیشتر بود، همیشه میتونی با این شماره تماس بگیری: 09202232789
فهرست مطالب
- چرا اعتبارسنجی لازمه؟
- رگولار اکسپرشن (Regex) چیست؟
- اعتبارسنجی شماره موبایل ایرانی
- اعتبارسنجی کد ملی ایرانی
- جزئیات و ترفندهای Regex
- اشتباهات رایج در اعتبارسنجی با Regex
- عیبیابی سریع: مشکلات رایج و راهحلها
- جمعبندی
- سوالات متداول (FAQ Schema)
چرا اعتبارسنجی لازمه؟
شاید با خودت بگی، خب یه کاربر اطلاعات اشتباه وارد کنه، مگه چی میشه؟ اما حقیقت اینه که اعتبارسنجی دادهها، از پایههای اصلی هر سیستم نرمافزاری موفقه. بیا چند تا از دلایل مهمش رو با هم مرور کنیم:
- یکپارچگی داده (Data Integrity): اگه دادهها معتبر نباشن، دیتابیس شما پر از آشغال میشه. شماره موبایلهای ناقص، کد ملیهای الکی، ایمیلهای ساختگی… اینا باعث میشن گزارشهات غلط از آب دربیاد، نتونی با کاربرا ارتباط برقرار کنی و کلاً سیستمت غیرقابل اعتماد بشه.
- تجربه کاربری بهتر (Better UX): هیچکس دوست نداره فرمی رو پر کنه و بعد از سابمیت کردن، با یه عالمه خطای بیمعنی روبهرو بشه. اعتبارسنجی بلادرنگ (real-time validation) و پیامهای خطای واضح، به کاربر کمک میکنه تا همون لحظه اشتباهش رو بفهمه و تصحیحش کنه. این یعنی کاربر از سیستم شما تجربهی بهتری خواهد داشت.
- امنیت (Security): دادههای نامعتبر میتونن راه رو برای حملات امنیتی مثل SQL Injection یا Cross-Site Scripting (XSS) باز کنن. اعتبارسنجی دقیق، به خصوص برای فیلدهایی مثل کد ملی یا شماره موبایل، یه لایه امنیتی اولیه و ضروریه.
- فرایندهای تجاری صحیح: خیلی از فرایندهای تجاری، مثل ارسال پیامک تأیید، احراز هویت، یا حتی فاکتورینگ، به صحت اطلاعات ورودی وابسته هستن. اگه شماره موبایل یا کد ملی معتبر نباشه، کل این فرایندها مختل میشن و هزینههای اضافی بهت تحمیل میشه.
رگولار اکسپرشن (Regex) چیست؟
رگولار اکسپرشن، یا همون Regex، یه توالی از کاراکترهاست که برای تعریف یک الگوی جستجو تو متن استفاده میشه. فکر کن میخوای تو یه سند بزرگ دنبال همه شماره تلفنها یا آدرس ایمیلها بگردی؛ تایپ کردن هر فرمت ممکن خیلی سخته. Regex بهت این امکان رو میده که یه الگو (Pattern) کلی تعریف کنی و به کامپیوتر بگی هر چیزی که این الگو رو داشت، پیدا کن. این الگوها شامل کاراکترهای معمولی (مثل حروف و اعداد) و فرادادهها (Metacharacters) هستن که معنی خاصی دارن. مثلاً `d` یعنی “هر رقمی” و `+` یعنی “یک یا بیشتر از عنصر قبلی”.
Regex یه ابزار فوقالعاده قدرتمنده برای پیدا کردن، جایگزین کردن و اعتبارسنجی رشتهها. یادگیریش شاید اولش کمی گیجکننده به نظر بیاد، ولی اگه مفاهیم پایه رو درک کنی، دیگه ازش جدا نمیشی. اگه میخوای اطلاعات بیشتری در مورد Regex و کاربردهاش به دست بیاری، حتماً یه سر به صفحه اصلی fa-tools بزن. اونجا کلی منابع مفید پیدا میکنی که بهت کمک میکنه تا مهارتهات رو ارتقا بدی.
چند تا از فرادادههای مهم در Regex:
- `.` (نقطه): هر کاراکتری به جز خط جدید.
- `d`: هر رقم (0-9). معادل `[0-9]`.
- `w`: هر حرف، رقم یا آندرلاین. معادل `[a-zA-Z0-9_]`.
- `s`: هر کاراکتر فاصله (مثل اسپیس، تب، خط جدید).
- `*`: صفر یا بیشتر از عنصر قبلی.
- `+`: یک یا بیشتر از عنصر قبلی.
- `?`: صفر یا یک از عنصر قبلی (اختیاری).
- `{n}`: دقیقاً `n` بار از عنصر قبلی.
- `{n,m}`: بین `n` تا `m` بار از عنصر قبلی.
- `^`: شروع خط/رشته.
- `$`: پایان خط/رشته.
- `[]`: مجموعهای از کاراکترها. مثلاً `[abc]` یعنی ‘a’ یا ‘b’ یا ‘c’.
- `()`: گروه بندی. برای اعمال کوانتفایرها یا استخراج زیررشتهها.
- `|`: یا (OR). مثلاً `cat|dog` یعنی ‘cat’ یا ‘dog’.
اعتبارسنجی شماره موبایل ایرانی
اعتبارسنجی شماره موبایل تو ایران یه داستان مخصوص خودشو داره. برخلاف خیلی از کشورها که شاید فرمتهای خیلی متنوعی نداشته باشن، تو ایران ممکنه کاربرا شماره رو با صفر اول، بدون صفر، با کد کشور (+98)، یا حتی با فاصله و خط تیره وارد کنن. ما باید بتونیم تا جای ممکن این حالتها رو پوشش بدیم.
ساختار شماره موبایل در ایران
شماره موبایلهای ایرانی معمولاً ۱۱ رقمی هستن که با `09` شروع میشن. بعد از `09`، دو رقم بعدی پیششماره اپراتور رو مشخص میکنه (مثل 0912 برای همراه اول، 0935 برای ایرانسل و…). بعد از اون هم ۷ رقم بعدی، شماره اختصاصی مشترکه.
ساختار کلی:
- 📱 شروع با `09` (یا `+989` یا فقط `9`)
- ✅ مجموعاً ۱۱ رقم با احتساب صفر اول
- ⭐ مثال: `09123456789`
الگوهای Regex برای شماره موبایل
بریم سراغ سناریوهای مختلف و Regexهای مربوط به هر کدوم:
1. فرمت استاندارد (با صفر اول): `09xx-xxx-xxxx`
این رایجترین فرمت شماره موبایله که با `09` شروع میشه و ۱۱ رقمه:
^09d{9}$
^: شروع رشته.09: باید با 09 شروع بشه.d{9}: ۹ رقم عددی دیگه (بعد از 09) که در مجموع ۱۱ رقم میشه.$: پایان رشته.
2. فرمت با کد کشور: `+989xx-xxx-xxxx`
اگه کاربرا کد کشور رو هم وارد میکنن، این الگو به کارت میاد:
^(+98|0)?9d{9}$
(+98|0)?: یعنی رشته میتونه با `+98` یا `0` شروع بشه، یا اصلاً با هیچکدوم (علامت `?` باعث میشه این گروه اختیاری باشه).- بقیه الگو مثل قبل، `9` و ۹ رقم دیگه.
3. فرمت با فاصله یا خط تیره (انعطافپذیر):
اگه میخوای شمارههایی مثل `0912 123 4567` یا `0912-123-4567` هم قبول بشن، این الگو مناسبه:
^(+98|0)?9d{2}[- ]?d{3}[- ]?d{4}$
[- ]?: به معنی یک خط تیره یا یک فاصله، که هر دو اختیاری هستن (صفر یا یک بار).
نکته مهم:
اعتبارسنجی Regex فقط ساختار رو بررسی میکنه، نه وجود واقعی شماره. یعنی با Regex نمیتونی بفهمی یه شماره موبایل واقعاً فعال هست یا نه. برای این کار نیاز به سرویسهای احراز هویت پیامکی (OTP) داری.
| فرمت شماره موبایل | نمونههای قابل قبول |
|---|---|
| استاندارد (09xxxxxxxx) | 09123456789, 09351234567 |
| با کد کشور (+989xxxxxxxxx) | +989123456789, +989351234567 |
| بدون صفر اول (9xxxxxxxxx) | 9123456789, 9351234567 |
| با فاصله یا خط تیره (انعطافپذیر) | 0912 345 6789, 0935-123-4567, +98 912 345 6789 |
اعتبارسنجی کد ملی ایرانی
اعتبارسنجی کد ملی، داستانش کمی پیچیدهتر از شماره موبایله. اینجا دیگه فقط با طول و فرمت سروکار نداریم، بلکه یه الگوریتم کنترلی هم پشتش خوابیده که باید رعایت بشه. یعنی هر ۱۰ رقم عددی، کد ملی معتبری نیست.
ساختار کد ملی و الگوریتم کنترل صحت
کد ملی ایرانی یک عدد ۱۰ رقمیه که از سمت چپ، سه رقم اول کد شهرستان محل صدور رو نشون میده. ۷ رقم بعدی به صورت تصادفی اختصاص داده میشن و رقم دهم هم رقم کنترل (Check Digit) هست که با یک الگوریتم خاص محاسبه میشه. این رقم کنترل کمک میکنه تا از وارد کردن کد ملیهای اشتباه یا تایپی جلوگیری بشه.
الگوریتم محاسبه رقم کنترل (روش ساده):
- 9 رقم اول کد ملی رو در نظر بگیر.
- هر رقم رو به ترتیب در اعداد 10 تا 2 ضرب کن (رقم اول در 10، رقم دوم در 9 و … رقم نهم در 2).
- حاصل ضربها رو با هم جمع کن.
- مجموع رو بر 11 تقسیم کن و باقیمانده رو به دست بیار.
- اگه باقیمانده کوچکتر از 2 بود، رقم کنترل باید برابر با همون باقیمانده باشه.
- اگه باقیمانده بزرگتر یا مساوی 2 بود، رقم کنترل باید برابر با `11 – باقیمانده` باشه.
- در نهایت، این رقم کنترلی که محاسبه کردی باید با رقم دهم کد ملی ورودی برابر باشه.
این الگوریتم رو نمیشه فقط با Regex پیادهسازی کرد و نیاز به یه کوچولو کدنویسی هم هست.
Regex اولیه برای کد ملی
اولین گام تو اعتبارسنجی کد ملی، اینه که مطمئن بشیم ورودی یک عدد ۱۰ رقمیه و شامل حروف یا کاراکترهای دیگه نیست. این کار رو به راحتی با Regex میشه انجام داد:
^d{10}$
این Regex فقط چک میکنه که رشتهی وارد شده دقیقاً ۱۰ رقم عددی باشه. اما همونطور که گفتم، این تازه اول کاره. کد ملی مثل `1111111111` یا `1234567890` با این Regex معتبر شناخته میشه، در حالی که در واقعیت نامعتبرن.
الگوریتم اعتبارسنجی پیشرفته (همراه با کدنویسی)
برای اعتبارسنجی کامل کد ملی، باید Regex رو با کدنویسی ترکیب کنیم. این یه مثال از چگونگی پیادهسازی این الگوریتم به زبان JavaScript هست. تو زبانهای دیگه مثل PHP یا Python هم منطق کار دقیقاً همینه.
مثال JavaScript برای اعتبارسنجی کد ملی:
function isValidIranianNationalCode(input) {
if (!/^d{10}$/.test(input)) return false; // Regex اولیه: 10 رقم عددی
// از بین بردن صفرهای اضافی از سمت چپ (اگر وجود داشته باشد)
const nationalCode = ("0000000000" + input).slice(-10);
// بررسی کدهای ملی تکراری (مثلاً 1111111111)
if (/^(d)1{9}$/.test(nationalCode)) return false;
let sum = 0;
for (let i = 0; i < 9; i++) {
sum += parseInt(nationalCode[i]) * (10 - i);
}
const remainder = sum % 11;
const controlDigit = parseInt(nationalCode[9]);
if (remainder < 2) {
return controlDigit === remainder;
} else {
return controlDigit === (11 - remainder);
}
}
// مثال استفاده:
// console.log(isValidIranianNationalCode("0023963004")); // یک کد ملی معتبر - true
// console.log(isValidIranianNationalCode("1234567890")); // نامعتبر - false (رقم کنترل اشتباه)
// console.log(isValidIranianNationalCode("1111111111")); // نامعتبر - false (رقم تکراری)
// console.log(isValidIranianNationalCode("002396300X")); // نامعتبر - false (حرف)
تو این تابع، اول با Regex چک میکنیم که ورودی حتماً ۱۰ رقم باشه. بعدش، با الگوریتم کنترلی که توضیح دادیم، رقم دهم رو اعتبارسنجی میکنیم. اینجوری یه اعتبارسنجی دو مرحلهای و قدرتمند داریم.
کدهای آماده و اسنیپتهای این شکلی رو میتونی تو بخش کدهای آماده و اسنیپت سایت ما پیدا کنی. با استفاده از این ابزارها میتونی خیلی سریعتر توسعه بدی و دیگه وقتت رو الکی سر چیزای تکراری از دست ندی.
جزئیات و ترفندهای Regex
Regex دنیای پر از جزئیاته. دونستن چند تا ترفند میتونه الگوهای شما رو قدرتمندتر و بهینهتر کنه.
- Lookahead و Lookbehind: اینا ابزارهایی هستن که به Regex اجازه میدن بدون مصرف کردن کاراکترها (یعنی بدون اینکه تو رشته مطابقت یافته قرار بگیرن)، جلو یا عقب رو نگاه کنن. مثلاً `(?=pattern)` (positive lookahead) چک میکنه که بلافاصله بعد از موقعیت فعلی، الگو وجود داشته باشه.
- کوانتیفایر حریص (Greedy) در برابر غیرحریص (Lazy): به طور پیشفرض، کوانتیفایرهایی مثل `*`, `+`, `?` و `{}` تا جای ممکن بیشترین تطابق رو پیدا میکنن (Greedy). با اضافه کردن `?` بعد از کوانتیفایر، میتونید اون رو Lazy کنید تا کمترین تطابق رو پیدا کنه. مثلاً `.*?`
- گروههای Non-capturing: اگه گروهی رو فقط برای گروه بندی میخواین و نمیخواین محتوای اون گروه رو ذخیره کنید، از `(?:…)` به جای `(…)` استفاده کنید. این کار کمی عملکرد رو بهتر میکنه.
- پرهیز از Backtracking زیاد: Regexهای پیچیده با کوانتیفایرهای زیاد روی الگوهای طولانی میتونن باعث مشکل “Catastrophic Backtracking” بشن و برنامه رو کند کنن. سعی کنید الگوها رو تا جای ممکن مشخص و دقیق بنویسید و از تودرتویی بیش از حد بپرهیزید.
اشتباهات رایج در اعتبارسنجی با Regex
حتی حرفهایها هم گاهی تو استفاده از Regex دچار اشتباه میشن. اینجا چند تا از رایجترین اشتباهات رو میگم تا تو به دامشون نیفتی:
- اعتبارسنجی بیش از حد (Over-validation): گاهی اوقات توسعهدهندهها Regex رو خیلی سختگیرانه مینویسن. مثلاً شماره موبایلی که با فاصله وارد شده رو رد میکنن. این کار تجربه کاربری رو بد میکنه و ممکنه کاربرا از ثبتنام منصرف بشن. همیشه سعی کن تا جای ممکن انعطافپذیر باشی ولی از چهارچوب استاندارد خارج نشی.
- اعتبارسنجی ناکافی (Under-validation): از اون طرف، اگه Regex خیلی ساده باشه (مثلاً فقط چک کنه ۱۰ رقم عددی باشه برای کد ملی)، اطلاعات غلط رو از فیلتر رد میکنه. باید یه تعادل بین سختگیری و انعطافپذیری ایجاد کنی.
- فراموش کردن Anchorها (`^` و `$`): اگه `^` و `$` رو اول و آخر Regex نذاری، Regex فقط چک میکنه که الگو *در جایی از رشته* وجود داشته باشه، نه اینکه *کل رشته* دقیقاً همون الگو باشه. این میتونه نتایج اشتباهی بده.
- عدم در نظر گرفتن موارد خاص: مثلاً برای شماره موبایل، باید حالتهای شروع با ۰۹، +۹۸۹ و حتی ۹ رو پوشش بدی. اگه فقط روی یه حالت تمرکز کنی، ممکنه کلی کاربر رو از دست بدی.
- پیچیدهسازی بیمورد: گاهی وقتها یه Regex خیلی پیچیده برای یه کار ساده نوشته میشه. سعی کن همیشه از سادهترین و خواناترین Regex که کار رو راه میندازه استفاده کنی. پیچیدگی زیاد، احتمال خطا رو بالا میبره و نگهداری کد رو سخت میکنه.
اگه حس میکنی تو این مسیر نیاز به کمک داری یا به یه مشکل پیچیده خوردی، همیشه میتونی با تیم فنی ما تماس بگیری. ما اینجا هستیم تا کمکت کنیم مشکلاتتو حل کنی.
عیبیابی سریع: مشکلات رایج و راهحلها
هیچ پروژهای بدون چالش نیست! تو کار با Regex هم ممکنه به مشکلاتی بخوری. اینجا چند تا از مشکلات رایج و راه حلهای سریعشون رو آوردم:
1. Regex کار نمیکنه و هیچ چیزی رو پیدا نمیکنه (False Negatives)
- مشکل احتمالی:
- Anchorها (`^` و `$`): اگه رشته حاوی کاراکترهای اضافی قبل یا بعد از الگو باشه و شما از این Anchorها استفاده کرده باشین، تطابقی صورت نمیگیره.
- Escaping کاراکترهای خاص: اگه کاراکترهایی مثل `.`، `+`، `*` و … رو در Regexتون به صورت literal (یعنی دقیقاً همون کاراکتر) میخوایین استفاده کنین، باید اونها رو با “ اسکیپ (Escape) کنین. مثلاً `+98` به جای `+98`.
- تغییر الگو: یه اشتباه تایپی کوچک در الگو میتونه کل Regex رو خراب کنه.
- راهحل:
- اگه فقط میخوای الگو در جایی از رشته وجود داشته باشه، Anchorها رو بردار.
- همه کاراکترهای خاصی که به صورت Literal باید استفاده بشن رو اسکیپ کن.
- Regex رو تو یه Regex Tester آنلاین مثل `regex101.com` یا `regexr.com` تست کن تا اشتباهات تایپی و منطقی رو پیدا کنی.
2. Regex موارد اشتباه رو هم قبول میکنه (False Positives)
- مشکل احتمالی:
- Regex خیلی کلی: الگو به اندازه کافی دقیق نیست و شامل مواردی میشه که نباید.
- کوانتیفایر نامناسب: استفاده از `*` به جای `+` یا `?` میتونه باعث بشه تطابقهایی ایجاد بشن که انتظارش رو نداری.
- فراموش کردن الگوریتمهای تکمیلی: برای کد ملی، Regex تنها کافی نیست و باید الگوریتم کنترلی رو هم اعمال کنی.
- راهحل:
- الگوی Regex رو دقیقتر کن. برای مثال، برای شماره موبایل، محدود کردن پیششمارهها (مثلاً فقط 0910 تا 0999).
- از کوانتیفایرهای مناسب و دقیقتر مثل `{n}` یا `{n,m}` استفاده کن.
- برای کد ملی، حتماً از الگوریتم محاسباتی رقم کنترل در کنار Regex استفاده کن.
3. عملکرد کند Regex (Performance Issues)
- مشکل احتمالی:
- Catastrophic Backtracking: Regex خیلی پیچیده و حریص، به خصوص با گروههای تودرتو و کوانتیفایرهای `*` یا `+` روی رشتههای طولانی.
- تستهای مکرر: اجرای مکرر Regex روی یک رشته یا در یک حلقه بیمورد.
- راهحل:
- Regex رو سادهتر کن. از گروههای non-capturing `(?:…)` استفاده کن اگه نیازی به گرفتن اون بخش نداری.
- از کوانتیفایرهای Lazy (`*?`, `+?`) استفاده کن تا Backtracking کاهش پیدا کنه.
- قبل از اعمال Regex پیچیده، با یه Regex سادهتر و سریعتر طول و کاراکترهای کلی رشته رو چک کن.
جمعبندی
خب رفیق، رسیدیم به پایان این سفر جذاب تو دنیای اعتبارسنجی با Regex. دیدی که چطور با این ابزار قدرتمند میتونیم شماره موبایل و کد ملی رو، حتی با پیچیدگیهای خاص خودشون، به راحتی اعتبارسنجی کنیم. نکته کلیدی اینه که Regex یه ابزار عالی برای بررسی ساختار دادههاست، اما برای اعتبارسنجی کامل مثل کد ملی، باید اون رو با منطق برنامهنویسی و الگوریتمهای خاص خودش ترکیب کنیم.
همیشه یادت باشه که اعتبارسنجی دقیق، فقط یه کار فنی نیست، بلکه یه سرمایهگذاری برای کیفیت دادهها، امنیت سیستم و رضایت کاربرات محسوب میشه. پس هیچوقت ازش غافل نشو و همیشه سعی کن بهترین و کاملترین روشها رو برای اعتبارسنجی اطلاعاتت به کار ببری. امیدوارم این مقاله برات مفید بوده باشه و بتونی با اعتماد به نفس بیشتری از Regex تو پروژههات استفاده کنی. دمت گرم که تا اینجا همراه ما بودی!
سوالات متداول (FAQ Schema)
سوال: آیا Regex به تنهایی برای اعتبارسنجی کد ملی کافی است؟
خیر، Regex تنها میتواند ساختار کد ملی (10 رقم عددی بودن) را بررسی کند. برای اعتبارسنجی کامل و مطمئن کد ملی، حتماً باید از الگوریتم محاسباتی رقم کنترل نیز در کنار Regex استفاده کنید.
سوال: چگونه میتوانم شماره موبایل را با فرمتهای مختلف (با صفر، بدون صفر، با +98) اعتبارسنجی کنم؟
شما میتوانید از یک Regex انعطافپذیر استفاده کنید که هر سه حالت را پوشش دهد. برای مثال، الگو `^(+98|0)?9d{9}$` هم شمارههای 09xxxxxxxxx و هم +989xxxxxxxxx و هم 9xxxxxxxxx را قبول میکند.
سوال: منظور از “Catastrophic Backtracking” در Regex چیست و چگونه آن را رفع کنیم؟
“Catastrophic Backtracking” زمانی رخ میدهد که Regex خیلی پیچیده و حریص، مخصوصاً با کوانتیفایرهای نامحدود (`*`, `+`) و گروههای تودرتو، روی یک رشته طولانی به بنبست بخورد و زمان زیادی برای جستجو صرف کند. برای رفع آن، میتوانید Regex را سادهتر کنید، از گروههای non-capturing `(?:…)` و کوانتیفایرهای Lazy (`*?`, `+?`) استفاده کنید.
سوال: آیا استفاده از Regex برای اعتبارسنجی سمت کاربر (Client-side) امن است؟
Regex سمت کاربر (با JavaScript) برای بهبود تجربه کاربری و بازخورد سریع به کاربر عالی است. اما همیشه باید اعتبارسنجی نهایی را سمت سرور (Server-side) نیز انجام دهید. اطلاعاتی که از سمت کاربر میآید همیشه قابل دستکاری است و هرگز نباید بدون اعتبارسنجی سمت سرور به آنها اعتماد کرد.


