javascriptInput contracts and validationاعتبارسنجی ورودی در جاوااسکریپت
قرارداد ورودی در جاوااسکریپت را پیش از تبدیل بنویسید؛ نوع، شکل، محدوده و پیام شکست را با مثال تعداد کالا و رد ورودی مبهم بررسی کنید.
مفهوم به زبان ساده
اعتبارسنجی یعنی بررسی کنیم داده با قواعد برنامه سازگار است. این قواعد باید پیش از نوشتن تابع روشن باشند: چه نوعی دریافت میکنیم، چه شکلهایی مجازند و چه محدودهای پذیرفته میشود؟ «قابل تبدیل به عدد بودن» با «تعداد کالای مجاز بودن» یکی نیست. دادهٔ فرم، query، فایل ذخیره و پاسخ شبکه هرکدام مرز ورودیاند و نباید به ظاهرشان اعتماد کرد.
قرارداد مثال، متن رقم لاتین ساده برای تعداد یک تا نودونه است. فاصلهٔ ابتدا و انتها حذف میشود، اما علامت، اعشار، نماد علمی و مقدار صفر رد میشوند. ابتدا نوع، بعد شکل و سپس محدوده بررسی میشود. برای رقم فارسی، مرحلهٔ عادیسازی مشخصی اضافه کنید. پاککردن همهٔ نویسههای غیرعددی میتواند ورودی نادرست را بیخبر به عدد دیگری تبدیل کند.
تابع برای ورودی معتبر عدد برمیگرداند و برای ورودی نامعتبر خطا پرتاب میکند. رابط میتواند خطا را به پیام قابل اصلاح تبدیل کند و مقدار تایپشده را نگه دارد. بررسی مرورگر جای کنترل مستقل سرور را نمیگیرد. برای تمرین، ورودی خالی، منفی، اعشاری، رقم فارسی و مرز نودونه را بیازمایید؛ نتیجهٔ مورد انتظار را پیش از اجرا بنویسید و تغییر قرارداد را همراه آزمون انجام دهید.
کجا به کار میآید؟
- تبدیل ورودی فرم به مدل عددی با قواعد قابل توضیح
- جلوگیری از پذیرش خاموش ورودی مبهم در فایل، query و پاسخ شبکه
از تعریف تا یک مثال واقعی
function parseQuantity(raw) {
if (typeof raw !== 'string') throw new TypeError('Expected text');
const text = raw.trim();
if (!/^[0-9]{1,2}$/.test(text)) throw new Error('Use plain digits');
const value = Number(text);
if (value < 1 || value > 99) throw new RangeError('Out of range');
return value;
}
console.log(parseQuantity(' 3 '));
for (const raw of ['', '1e1', '0']) {
try { parseQuantity(raw); }
catch { console.log('رد شد'); }
}
3 رد شد رد شد رد شد
این مثال چطور کار میکند؟
نوع ورودی پیش از فراخوانی trim بررسی میشود.
الگوی رقم ساده و سپس محدودهٔ یک تا نودونه کنترل میشود.
ورودی معتبر عدد سه میدهد؛ سه ورودی ناسازگار بدون تبدیل خاموش رد میشوند.
اشتباه رایج
Number بهتنهایی قرارداد ورودی نیست؛ رشتهٔ خالی را صفر و برخی شکلهای دیگر را عدد میکند. اعتبارسنجی هم با پاکسازی HTML یا بررسی مجوز کاربر یک کار واحد نیست.
این را به خاطر بسپارید
نوع، شکل، محدوده و رفتار شکست را مشخص کنید؛ سپس تبدیل را دقیقاً مطابق همان قرارداد انجام دهید.