راضیه مرادی
راضیه مرادی
خواندن ۶ دقیقه·۲ سال پیش

۹ نکته مهم که در دیزاین input validationها درنظر نگرفته‌اید

اگر میخواین «اعتبارسنجی فیلدهای متنی - input validation» محصولتون رو دیزاین کنید، به این چک لیست به نگاه بندازین.

مواردی که در ادامه خواهم گفت در نهایت هم به تجربه‌ی بهتر کاربرها منجر میشه و هم به اینکه برنامه‌نویس‌ها بتونن کد جامع‌تر و تمیزتری داشته باشن.


اول لیست تمام خطاهایی که ممکنه برای مقادیر اینپوت‌های محصولتون به‌وجود بیاد رو بنویسید. مثلا:

  • خطای اجباری بودن (required)
  • خطای حداقل کاراکتر (min)
  • خطای حداکثر کاراکتر (max)
  • خطای صحیح نبودن، که می‌تونه به خاطر وارد کردن کاراکترهای اشتباه یا فرمت اشتباه باشه (pattern)
  • و …

حالا این موارد رو برای اون‌ها در نظر بگیرید:


۱. نوشتار - writing:

۱- یکپارچگی بین جملات رو از لحاظ لحن و جمله‌بندی حفظ کنید.

مثلا ❌ برای خطای min ننویسید «رمزعبور باید حداقل ۱۰ کاراکتر داشته باشه»، در صورتی که برای خطای max نوشته بودید «وارد کردن بیشتر از ۲۰ حرف برای رمزعبور مجاز نیست».

عدم رعایت یکپارچگی بین جملات خطا
عدم رعایت یکپارچگی بین جملات خطا


۲- تا جایی که می‌تونید متن خطاتون رو واضح بنویسید که کاربر متوجه بشه مشکل کجاست.

مثلا زمانی که کاربر کاراکترهای غیرمجازی رو وارد می‌کنه، ننویسید «❌ نام کاربری صحیح نیست»، بلکه بنویسید «✅ نام کاربری فقط می‌تونه شامل حروف انگلیسی باشه»

البته این مورد برای همه‌جا صدق نمی‌کنه. برای مثال خطای «❌ شماره موبایل فقط می‌تونه شامل اعداد باشه» موضوع خیلی بدیهی‌ای هست و خطای «✅ شماره موبایل صحیح نیست» انتخاب بهتری می‌تونه باشه.


۳- حواستون باشه در هیچ‌یک از خطاها به کاربر نگید که کاری رو اشتباه داده. بلکه غیر مستقیم بگید که اشتباهی رخ داده.

برای مثال ننویسید «❌ رمزعبورت رو اشتباه وارد کردی»، بلکه بنویسید «✅ رمز عبور صحیح نیست».


۲. ترتیب اعتبارسنجی‌ها:

باید مشخص کنید که اعتبارسنجی‌ها با چه ترتیبی چک شوند. به طور کلی باید اول required بودن چک شود -> بعد pattern -> بعد min -> بعد max.

برای مثال اگر شماره موبایل باید ۱۱ کاراکتر داشته باشه و فقط شامل اعداد باشه، در صورتی که کاربر کاراکتر «*» رو وارد کنه اول باید patternها (شامل اعداد بودن) چک شوند بعد min/max (۱۱ کاراکتر).

وقتی مقدار «*۰۹» در اینپوت شماره همراه وارد شود، خطای «۱۱ کاراکتر» خطای مناسبی برای نمایش نیست.
وقتی مقدار «*۰۹» در اینپوت شماره همراه وارد شود، خطای «۱۱ کاراکتر» خطای مناسبی برای نمایش نیست.


همچنین نمایش چند خطا با هم نیز اشتباه است:


۳. زمان انجام هر اعتبارسنجی

مشخص کنید که هر اعتبارسنجی چه موقعی انجام شود. که معمولا یکی از ۴ حالت زیره:

۱- به محض اینکه کاربر کاراکتری رو در اینپوت وارد کرد.


۲- بعد از یک مکث کوتاهی بعد از اینکه کاربر کاراکتر/کاراکترهایی رو در اینپوت وارد کرد. (مثلا بعد از ۲ ثانیه تایپ نکردن)

در اینجور موارد نباید مثل مورد اول به محض اینکه کاربر کاراکتر اول رو وارد کرد بهش خطا نشون بدیم بلکه باید صبر کنیم که تایپ کردنش تموم بشه و بعد اگر مشکلی داشت خطا رو نشون بدیم. تابحال این تجربه رو داشتم که در حال تایپ کردن اسمم با سرعت معقولی بودم و محصول درجا بهم خطا نشون داده که حداقل کاراکتر مثلا ۵تاست. خب بابا صبر کن دارم تایپ می‌کنم!


۳- بعد از اینکه focus از روی اینپوت برداشته شد.


۴- بعد از کلیک روی دکمه‌ی enter یا submit فرم.


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

نمایش خطا حتی بعد از پر کردن اینپوت required
نمایش خطا حتی بعد از پر کردن اینپوت required



۴. نمایش خطا یا هیچی

در بعضی موارد باید تصمیم بگیرید که آیا به نمایش خطا نیاز هست یا نه؟

یعنی می‌تونیم ۲ رویکرد داشته باشیم: ۱- کاربر اشتباهی انجام میده و خطای متناسب با اون رو می‌بینه. ۲- کاربر از اول نمی‌تونه کاراکتر اشتباهی رو وارد کنه.

مثلا برای اینپوتی که میتونه حداکثر ۳۰ کاراکتر داشته باشه، ۱- اجازه بدیم کاراکتر ۳۱ام رو وارد کنه و بهش خطا نشون بدیم. ۲- نگذاریم که بتونه بیشتر از ۳۰ کاراکتر وارد اینپوت کنه.

سعی کنید این قانون رو به طور یکپارچه برای همه‌ی اینپوت‌های محصولتون رعایت کنید.

اینستاگرام: اجازه نمیده بیشتر از تعداد ماکزیمم (۳۰) کاراکتر وارد کنی. تلگرام: اجازه میده بیشتر از تعداد ماکزیمم (۳۲) کاراکتر وارد کنی، ولی خطا نشون میده.
اینستاگرام: اجازه نمیده بیشتر از تعداد ماکزیمم (۳۰) کاراکتر وارد کنی. تلگرام: اجازه میده بیشتر از تعداد ماکزیمم (۳۲) کاراکتر وارد کنی، ولی خطا نشون میده.



۵. ثابت بودن جایگاه المان‌ها

وقتی پایین اینپوت خطایی اضافه میشه، نباید جایگاه المان‌های پایینش رو تغییر بده.

با نمایش خطا، نباید دکمه «تایید» پایین‌تر بره.
با نمایش خطا، نباید دکمه «تایید» پایین‌تر بره.


برای اینکه این اتفاق نیفته، در کامپوننت اینپوت‌هاتون فضای خالی‌ای رو در نظر بگیرید، که وقتی خطایی رخ میده فقط اون فضا رو پر کنه.


۶. کاراکتر فاصله - space

در مواجه با space می‌تونید رویکردهای زیر رو داشته باشین:

۱- با فشردن space، کاراکتری در اینپوت وارد نشه.

برای اینپوت وبسایت نمی‌توانید spaceای وارد کنید
برای اینپوت وبسایت نمی‌توانید spaceای وارد کنید


۲- کاراکتر space در اینپوت وارد بشه، ولی برای اعتبارسنجی‌ها در نظر گرفته نشه و بعد از تایید همه‌ی spaceها حذف بشه.

برای اینپوت شماره موبایل می‌توانید space وارد کنید. خطایی نشون نمیده و بعد از تایید spaceها رو حذف می‌کنه.
برای اینپوت شماره موبایل می‌توانید space وارد کنید. خطایی نشون نمیده و بعد از تایید spaceها رو حذف می‌کنه.



۳- کاراکتر space در اینپوت وارد بشه، ولی بعد از تایید فقط spaceهای اول و آخر حذف بشه.

برای اینپوت نام می‌توانید space وارد کنید. خطایی نشون نمیده و بعد از تایید فقط spaceهای اول و آخر رو حذف می‌کنه.
برای اینپوت نام می‌توانید space وارد کنید. خطایی نشون نمیده و بعد از تایید فقط spaceهای اول و آخر رو حذف می‌کنه.


۴- کاراکتر space در اینپوت وارد بشه و براش خطا نشون بدیم.

این مورد برای جاهای مهمی مثل تعیین رمزعبور می‌تونه مهم باشه که شما به طور واضحی به کاربر بگید که نمیتونه از space استفاده کنه.

برای اینپوت نام کاربری می‌توانید space وارد کنید. ولی خطا نشون میده.
برای اینپوت نام کاربری می‌توانید space وارد کنید. ولی خطا نشون میده.


۵- کاراکتر space وارد بشه، ولی در اینپوت تبدیل به کاراکتر دیگری (مثل underline) بشه.

برای اینپوت نام کاربری می‌توانید space وارد کنید. ولی در لحظه spaceها رو به underline (_) تبدیل می‌کنه.
برای اینپوت نام کاربری می‌توانید space وارد کنید. ولی در لحظه spaceها رو به underline (_) تبدیل می‌کنه.


۷. کاراکتر خط بعد - enter

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

ولی در اینپوت‌هایی که نمی‌تونن خط بعد داشته باشن (مثل شماره موبایل، نام کاربری یا اسم) در صورتی که کاربر از کاراکتر enter استفاده کرد می‌تونیم طبق یکی از مواردی که در قسمت space نوشتم رفتار کنیم.


۸. کیبرد - keyboard

برای اینپوت‌هایی که فقط برای اعداد هستند، کیبرد اعداد رو نشون بدید. در غیر اینصورت کیبرد حروف و اعداد.

عملکرد اکشن اصلی کیبرد رو حتما در نظر بگیرید (منظورم دکمه‌ی آبی در عکس پایینه) یعنی مشخص کنید که می‌خواهید این دکمه برای هر اینپوت کدام‌یک از موارد زیر را انجام دهد:

(این مورد خیلی به validation ربطی نداشت ولی چون دیدم تو خیلی از اپلیکیشن‌های ایرانی مثل اسنپ‌فود، دیجی‌کالا، علی‌بابا و ... رعایت نشده اینجا اضافش کردم)


۹. کمک گرفتن از کامپوننت‌ها

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


برای ساختار کامپوننت ErrorMessage حواستون باشه که تکست «مقادیر متغیر» رو از تکست «جملات ثابت» جدا کنید. اینطوری در صورتی که بعد از اتمام دیزاین بخواید رایتینگ جملات ثابت رو تغییر بدید، در همه‌ی طرح‌هاتون اعمال می‌شه (به علت override نشدن).

مثلا در جمله‌ی «نام آیتم صحیح نیست»، «نام آیتم» متغیر و «صحیح نیست» ثابت هستند.



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

دیزاینیوایکسرایتینگاینپوتولیدیشن
Product Designer
شاید از این پست‌ها خوشتان بیاید