Validate হল সার্ভারে ডেটা পাঠানোর বা অ্যাপ্লিকেশনের ভিতরে প্রক্রিয়াকরণের আগে ব্যবহারকারীর ইনপুটের সঠিকতা পরীক্ষা করার প্রক্রিয়া। Android-এ, ফিল্ড ভ্যালিডেশনের মধ্যে ইমেল ফরম্যাট, ফোন নম্বর, পাসওয়ার্ড, আবশ্যিক ক্ষেত্র এবং অন্যান্য ব্যবসায়িক নিয়মের পরীক্ষা অন্তর্ভুক্ত। Material Design Guidelines, 2026 অনুসারে, Validate-কে ব্যবহারকারীকে স্পষ্ট প্রতিক্রিয়া প্রদান করা উচিত: একটি ত্রুটি বার্তা, ফিল্ডের রঙ পরিবর্তন, অবস্থা আইকন। সঠিক ভ্যালিডেশন ফর্মের ভুল জমা দেওয়ার সংখ্যা 40-60% কমায় এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করে।
মূল পয়েন্ট
ফিল্ড ভ্যালিডেশন হল নির্দিষ্ট নিয়ম অনুসারে ব্যবহারকারীর দ্বারা প্রবেশ করানো একটি মানের যাচাইকরণ। প্রতিটি ক্ষেত্রের নিজস্ব ডেটা টাইপ রয়েছে: ইমেল, সংখ্যা, ফোন, পাসওয়ার্ড, টেক্সট। প্রতিটি প্রকারের নিজস্ব মানদণ্ড রয়েছে: ফরম্যাট, দৈর্ঘ্য, মানের সীমা, আবশ্যিকতা। ফিল্ড ভ্যালিডেশন প্রশ্নের উত্তর দেয়: এই ক্ষেত্রের ইনপুট কি সঠিক?
ফিল্ড ভ্যালিডেশন এবং ফর্ম ভ্যালিডেশনের মধ্যে পার্থক্য হল যে একটি ক্ষেত্র অন্যদের থেকে স্বাধীনভাবে পরীক্ষা করা হয়। ইমেল একটি ইমেল প্যাটার্ন অনুযায়ী যাচাই করা হয়, ফোন একটি ফোন প্যাটার্ন অনুযায়ী। যদি একটি ক্ষেত্র অবৈধ হয়, ব্যবহারকারী সেই নির্দিষ্ট ক্ষেত্রের জন্য একটি ত্রুটি দেখেন। ফর্মটি জমা না দেওয়া অবস্থায় থাকতে পারে এমনকি যদি একটি ক্ষেত্র ভ্যালিডেশনে ব্যর্থ হয়। ফিল্ড ভ্যালিডেশন সম্পূর্ণ ফর্ম ভ্যালিডেশনের বিল্ডিং ব্লক।
UX গবেষণা অনুসারে, ব্যবহারকারীরা ইনপুট সম্পূর্ণ করার 1-2 সেকেন্ডের মধ্যে একটি ভ্যালিডেশন ত্রুটি দেখতে আশা করেন। 3 সেকেন্ডের বেশি বিলম্বকে অ্যাপ্লিকেশন সমস্যা হিসাবে ধরা হয়। এই কারণেই TextWatcher-এর মাধ্যমে রিয়েল-টাইম ভ্যালিডেশন শুধুমাত্র সাবমিট বাটন চাপলে পরীক্ষা করার চেয়ে বেশি পছন্দনীয়।
Android-এ ফিল্ড ভ্যালিডেশন-এর তিনটি প্রধান পদ্ধতি রয়েছে। প্রথমটি হল শর্তসাপেক্ষ অপারেটর (if, when) এর মাধ্যমে ম্যানুয়াল পরীক্ষা। ডেভেলপার একটি ফাংশন লেখে যা একটি স্ট্রিং নেয় এবং Boolean বা ত্রুটি বার্তা ফেরত দেয়। এই পদ্ধতি লজিকের উপর সম্পূর্ণ নিয়ন্ত্রণ দেয় কিন্তু প্রতিটি ক্ষেত্র এবং প্রতিটি শর্তের জন্য কোড লেখার প্রয়োজন হয়।
দ্বিতীয় পদ্ধতি হল Android-এর বিল্ট-ইন ক্লাস ব্যবহার করা। উদাহরণস্বরূপ, Patterns.EMAIL_ADDRESS.matcher(email).matches() একটি স্ট্যান্ডার্ড প্যাটার্ন অনুযায়ী ইমেল যাচাই করে। Patterns.PHONE.matcher(phone).matches() ফোন নম্বর যাচাই করে। TextUtils.isEmpty() খালি থাকা পরীক্ষা করে। এই পদ্ধতিগুলি বাহ্যিক নির্ভরতা যোগ না করেই মৌলিক পরিস্থিতি কভার করে।
তৃতীয় পদ্ধতি হল ভ্যালিডেশন লাইব্রেরি। InputValidator, AndroidValidator বা Commons Validator-এর মতো লাইব্রেরি প্রস্তুত-তৈরি অ্যানোটেশন এবং ভ্যালিডেশন চেইন সরবরাহ করে। ডেভেলপার নিয়মগুলি ঘোষণামূলকভাবে বর্ণনা করে: @Email, @NotEmpty, @MinLength(6)। লাইব্রেরি নিজেই ভ্যালিডেশন সম্পাদন করে এবং ত্রুটির একটি তালিকা ফেরত দেয়। এটি ডেভেলপমেন্টের গতি বাড়ায় কিন্তু একটি নির্ভরতা যোগ করে।
| পদ্ধতি | সুবিধা | অসুবিধা | কখন ব্যবহার করবেন |
|---|---|---|---|
| ম্যানুয়াল পরীক্ষা | সম্পূর্ণ নিয়ন্ত্রণ, কোন নির্ভরতা নেই | অনেক কোড, রক্ষণাবেক্ষণের জটিলতা | 1-3 ক্ষেত্র সহ সহজ ফর্ম |
| বিল্ট-ইন ক্লাস | দ্রুত, মানক প্যাটার্ন | সীমিত পরীক্ষার সেট | মানক ক্ষেত্র (ইমেল, ফোন) |
| লাইব্রেরি | সর্বনিম্ন কোড, ঘোষণামূলক পদ্ধতি | নির্ভরতা, কাস্টমাইজেশনের জটিলতা | 5+ ক্ষেত্র সহ জটিল ফর্ম |
ইমেল-এর জন্য, স্ট্যান্ডার্ড ভ্যালিডেশনে @ চিহ্ন, ডোমেন অংশের উপস্থিতি এবং স্পেস ও সিরিলিক অক্ষরের অনুপস্থিতি পরীক্ষা করা অন্তর্ভুক্ত। Android Patterns.EMAIL_ADDRESS সরবরাহ করে, যা বেশিরভাগ বৈধ ইমেল ঠিকানা কভার করে। তবে, যদি নির্দিষ্ট ভ্যালিডেশনের প্রয়োজন হয় (যেমন, শুধুমাত্র কর্পোরেট ডোমেন), একটি কাস্টম রেগুলার এক্সপ্রেশন লিখতে হবে। ইমেল ইনপুট সম্পূর্ণ হওয়ার পরে ভ্যালিডেট করা হয়, প্রতিটি অক্ষরের পরে নয়।
ফোন নম্বর একটি দেশ বা অঞ্চল মাস্ক অনুযায়ী যাচাই করা হয়। আন্তর্জাতিক নম্বরের জন্য E.164 ফরম্যাট ব্যবহার করা হয়: +দেশ কোড, অপারেটর কোড, নম্বর। Google-এর libphonenumber লাইব্রেরি ফোন ভ্যালিডেশনের জন্য শিল্প মান। এটি কোড দ্বারা দেশ নির্ধারণ করে, নম্বরের দৈর্ঘ্য এবং ফরম্যাট পরীক্ষা করে। Android-এ, মৌলিক ভ্যালিডেশনের জন্য PhoneNumberUtils.isGlobalPhoneNumber ব্যবহার করা যেতে পারে।
পাসওয়ার্ড-এর বেশ কয়েকটি জটিলতার মানদণ্ড রয়েছে: ন্যূনতম দৈর্ঘ্য, বড় এবং ছোট হাতের অক্ষর, অঙ্ক, বিশেষ অক্ষরের উপস্থিতি। Android-এ পাসওয়ার্ড ভ্যালিডেশনের জন্য কোন বিল্ট-ইন ক্লাস নেই — প্রতিটি প্রকল্প তার নিজস্ব প্রয়োজনীয়তা নির্ধারণ করে। সাধারণত, পাসওয়ার্ড একটি রেগুলার এক্সপ্রেশন বা শর্তের সেটের মাধ্যমে যাচাই করা হয়। ত্রুটি বার্তায় সঠিক প্রয়োজনীয়তা প্রকাশ না করা গুরুত্বপূর্ণ: “পাসওয়ার্ড খুব সহজ” “একটি বড় হাতের অক্ষর এবং একটি অঙ্ক প্রয়োজন” থেকে ভাল।
data class ValidationResult(
val isValid: Boolean,
val errorMessage: String? = null
)
fun validatePassword(password: String): ValidationResult {
if (password.length < 6)
return ValidationResult(false, "Minimum 6 characters")
if (!password.any { it.isUpperCase() })
return ValidationResult(false, "Uppercase letter required")
return ValidationResult(true)
}
উদাহরণে, validatePassword একটি isValid ফিল্ড এবং একটি ঐচ্ছিক ত্রুটি বার্তা সহ ValidationResult ফেরত দেয়। এই পদ্ধতিটি কম্পোজিশনের জন্য সুবিধাজনক: বেশ কয়েকটি পরীক্ষা ক্রমান্বয়ে করা হয় এবং প্রথম পাওয়া ত্রুটিটি ফেরত দেওয়া হয়। ইমেল এবং ফোন ভ্যালিডেশন একই নীতি অনুসরণ করে — প্রতিটি বার্তা বা সাফল্যের সাথে ফলাফল ফেরত দেয়।
ভ্যালিডেশনের সময় UX-কে গুরুতরভাবে প্রভাবিত করে। তিনটি কৌশল রয়েছে: প্রতিটি অক্ষরের পরে ভ্যালিডেশন (তাৎক্ষণিক), ফোকাস হারানোর পরে (onFocusLost), এবং ফর্ম জমা দেওয়ার সময় (onSubmit)। প্রতিটি কৌশল বিভিন্ন পরিস্থিতির জন্য উপযুক্ত। তাৎক্ষণিক ভ্যালিডেশন কঠোর সীমাবদ্ধতা সহ ক্ষেত্রগুলির জন্য ভাল — ফোন নম্বর, PIN কোড। OnFocusLost ইমেল এবং নামের জন্য উপযুক্ত। OnSubmit আবশ্যিক ক্ষেত্রের জন্য উপযুক্ত।
Material Design Guidelines অনুসারে, কৌশলগুলি একত্রিত করার পরামর্শ দেওয়া হয়: একটি ক্ষেত্র ফোকাস হারানোর সময় এবং ফর্ম জমা দেওয়ার সময়ও যাচাই করা উচিত। তাৎক্ষণিক ভ্যালিডেশন উপযুক্ত যখন সীমাবদ্ধতা স্পষ্ট — উদাহরণস্বরূপ, সর্বোচ্চ ক্ষেত্রের দৈর্ঘ্য। যদি ইমেলের জন্য প্রতিটি অক্ষরের পরে ত্রুটি দেখানো হয়, ব্যবহারকারী ইনপুট শেষ করার আগে একটি বার্তা দেখবেন। এটি বিরক্তিকর এবং রূপান্তর হ্রাস করে।
প্রথম ত্রুটির নিয়ম: ফর্ম জমা দেওয়ার সময়, শুধুমাত্র প্রথম অবৈধ ক্ষেত্রের জন্য ত্রুটি দেখান। ব্যবহারকারীকে 10টি ত্রুটির তালিকা দিয়ে বোঝাই করবেন না। প্রথম ত্রুটি ঠিক করার পরে, পরবর্তী ত্রুটিটি দেখানো যেতে পারে। এই ধাপে ধাপে নির্দেশিকা জ্ঞানীয় লোড হ্রাস করে এবং ব্যবহারকারীকে দ্রুত ফর্ম পূরণ করতে সহায়তা করে।
Android SDK Validate-এর জন্য মৌলিক টুল সরবরাহ করে: ইমেল এবং ফোনের জন্য Patterns, খালি থাকা পরীক্ষার জন্য TextUtils, ইচ্ছামত প্যাটার্নের জন্য রেগুলার এক্সপ্রেশন। 1-3টি ক্ষেত্র সহ প্রকল্পগুলির জন্য, এটি যথেষ্ট। তবে, 10+ ক্ষেত্র সহ ফর্মগুলিতে, ম্যানুয়াল ভ্যালিডেশন বজায় রাখা কঠিন হয়ে পড়ে — প্রতিটি নতুন ক্ষেত্রের জন্য একটি পৃথক ফাংশন এবং আপডেটেড সাবমিশন লজিক প্রয়োজন।
জনপ্রিয় ভ্যালিডেশন লাইব্রেরি: Android Saripaar (@Email, @NotEmpty, @Password অ্যানোটেশন), Apache Commons Validator (ইমেল, URL, ক্রেডিট কার্ড নম্বর ভ্যালিডেশন), রিঅ্যাকটিভ ভ্যালিডেশনের জন্য RxBinding + RxJava। Saripaar আপনাকে সরাসরি ইনপুট ক্ষেত্রে অ্যানোটেশন রাখতে এবং এক লাইনে ভ্যালিডেশন কল করতে দেয়: validator.validate()। লাইব্রেরি setError-এর মাধ্যমে স্বয়ংক্রিয়ভাবে ত্রুটি দেখায়।
Google TextInputLayout-এর সাথে Material Design Components ব্যবহার করার পরামর্শ দেয়। setError, setHelperText এবং setCounterEnabled-এর মাধ্যমে বিল্ট-ইন ভ্যালিডেশন তৃতীয় পক্ষের লাইব্রেরি ছাড়াই মৌলিক পরিস্থিতি কভার করে। জটিল প্রকল্পের (ফিনটেক, হেলথকেয়ার) জন্য, একটি সংমিশ্রণ ব্যবহার করা ভাল: Material Components + Clean Architecture-এর ডোমেন স্তর থেকে প্যাটার্ন সহ কাস্টম ভ্যালিডেশন।
প্রথম ত্রুটি হল ইনপুট শুরুর আগে ত্রুটি দেখানো। যদি একটি ক্ষেত্র আবশ্যিক হয় কিন্তু ব্যবহারকারী এটি পূরণ করা শুরু না করে, “ক্ষেত্রটি আবশ্যিক” দেখাবেন না। এটি সমস্যার একটি মিথ্যা অনুভূতি তৈরি করে। ত্রুটি কেবল তখনই দেখা উচিত যখন ব্যবহারকারী ক্ষেত্রটির সাথে ইন্টারঅ্যাক্ট করেছে: টাইপ করা শুরু করেছে, ক্ষেত্র ছেড়েছে, বা ফর্ম জমা দেওয়ার চেষ্টা করেছে।
দ্বিতীয় ত্রুটি হল অস্পষ্ট ত্রুটি বার্তা। বার্তাটি নির্দিষ্ট হওয়া উচিত এবং সমস্যা সমাধানের উপায় সুপারিশ করা উচিত। “অবৈধ ইমেল” খারাপ। “ইমেলে @ এবং একটি ডোমেন থাকতে হবে, যেমন user@example.com” ভাল। ব্যবহারকারীর বোঝা উচিত ঠিক কী ভুল এবং ডকুমেন্টেশন দেখার প্রয়োজন ছাড়াই কীভাবে এটি ঠিক করা যায়।
তৃতীয় ত্রুটি হল ব্যাখ্যা ছাড়াই জমা দেওয়া ব্লক করা। যদি ভ্যালিডেশন ত্রুটির কারণে সাবমিট বাটন নিষ্ক্রিয় থাকে, ব্যবহারকারীর দেখা উচিত কোন ক্ষেত্রগুলি অবৈধ। বার্তা ছাড়া একটি ধূসর বাটন ব্যবহারকারীর জন্য একটি মৃত শেষ। সর্বদা ত্রুটিযুক্ত ক্ষেত্রগুলি হাইলাইট করুন এবং প্রতিটি অবৈধ ক্ষেত্রের পাশে ত্রুটি টেক্সট দেখান।
| ত্রুটি | সমস্যা | সমাধান |
|---|---|---|
| ইনপুটের আগে ত্রুটি | ব্যবহারকারীকে ভয় দেখায় | শুধুমাত্র ইন্টারঅ্যাকশনের পরে যাচাই করুন |
| অস্পষ্ট বার্তা | ব্যবহারকারী কারণ বুঝতে পারে না | নির্দিষ্ট বিবরণ + উদাহরণ |
| ধূসর বাটন | কোন প্রতিক্রিয়া নেই | ত্রুটিগুলি হাইলাইট করুন + বার্তা দেখান |
| অতিরিক্ত ভ্যালিডেশন | খুব কঠোর নিয়ম | নিরাপত্তা এবং UX-এর মধ্যে ভারসাম্য |
সচরাচর জিজ্ঞাসিত প্রশ্ন
সর্বোত্তম সময় হল যখন ক্ষেত্রটি ফোকাস হারায় (onFocusLost) এবং ফর্ম জমা দেওয়ার সময়। প্রতিটি অক্ষরের পরে তাত্ক্ষণিক ভ্যালিডেশন শুধুমাত্র কঠোর সীমাবদ্ধতা সহ ক্ষেত্রগুলির জন্য উপযুক্ত: দৈর্ঘ্য, অঙ্ক, বিশেষ অক্ষর। ইমেল এবং পাসওয়ার্ডের জন্য, ব্যবহারকারী ইনপুট শেষ না করা পর্যন্ত অপেক্ষা করা এবং ক্ষেত্র ছেড়ে যাওয়ার পরে যাচাই করা ভাল।
Android SDK থেকে Patterns.EMAIL_ADDRESS ব্যবহার করুন। matcher(প্রবেশকৃতইমেল).matches() কল করুন — ইমেল বৈধ হলে পদ্ধতিটি true ফেরত দেয়। অতিরিক্ত পরীক্ষার (অস্থায়ী ডোমেন ব্লক করা, MX রেকর্ড পরীক্ষা) জন্য, সার্ভার-সাইড ভ্যালিডেশন প্রয়োজন। ক্লায়েন্ট সাইডে, বিল্ট-ইন প্যাটার্নের মাধ্যমে ফরম্যাট পরীক্ষা করা যথেষ্ট।
ক্ষেত্রগুলিতে অ্যানোটেশন সহ Saripaar-এর মতো একটি ভ্যালিডেশন লাইব্রেরি ব্যবহার করুন। এটি ভ্যালিডেশন কোড 3-5 গুণ কমিয়ে দেবে। যদি প্রকল্পটি Clean Architecture ব্যবহার করে, ভ্যালিডেশন লজিক ডোমেন স্তরে সরান এবং এটি UI থেকে পৃথকভাবে পরীক্ষা করুন। ত্রুটি প্রদর্শনের জন্য setError সহ TextInputLayout ব্যবহার করুন।
অবশ্যই। ক্লায়েন্ট-সাইড ভ্যালিডেশন UX-এর জন্য, সার্ভার-সাইড নিরাপত্তার জন্য। একজন আক্রমণকারী অ্যাপ্লিকেশনকে বাইপাস করে সরাসরি API-তে অনুরোধ পাঠাতে পারে। সার্ভারকে সমস্ত ক্ষেত্র পুনরায় ভ্যালিডেট করা উচিত। ক্লায়েন্ট-সাইড ভ্যালিডেশন সার্ভার-সাইড ভ্যালিডেশনকে প্রতিস্থাপন করে না বরং ব্যবহারকারীর সুবিধার জন্য এটি পরিপূরক করে।
Material Design Components থেকে TextInputLayout.setError() ব্যবহার করুন। পদ্ধতিটি ক্ষেত্রের নীচে একটি লাল বার্তা দেখায় এবং বর্ডারের রঙ পরিবর্তন করে। বিকল্প: ক্ষেত্রের পাশে ত্রুটির জন্য একটি পৃথক TextView। পৃথক ফিল্ড ভ্যালিডেশন ত্রুটির জন্য Toast বা Snackbar ব্যবহার করবেন না — ব্যবহারকারী বার্তাটিকে একটি নির্দিষ্ট ক্ষেত্রের সাথে সংযুক্ত করবে না।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন