اعتبار سنجی فرم با جاوا اسکریپت – انجمن DEV
قبل از ارسال داده ها به سرور، مهم است که مطمئن شوید تمام کنترل های فرم مورد نیاز با فرمت صحیح پر شده اند. این اعتبار فرم سمت مشتری نامیده می شود و به اطمینان از مطابقت داده های ارسالی با الزامات مندرج در کنترل های فرم های مختلف کمک می کند.
اعتبار سنجی HTML
اگرچه اعتبار سنجی می تواند با ویژگی های HTML مانند – required
، minlength
، maxlength
، min
، max
، type
، و pattern
. نقطه ضعف آن این است که نمی توانید آن را مطابق با نیازهای خود سفارشی کنید.
اعتبار سنجی فرم چیست؟
آیا تا به حال سعی کرده اید در وب سایتی ثبت نام کنید که در آن شرایط خاصی داشته باشد؟ پسندیدن:
- اطمینان حاصل کنید که رمز عبور شما بین 8 تا 30 کاراکتر است یا مطمئن شوید که رمز عبور شما بین حروف، اعداد و ستاره مخلوط شده است.
- یا مطمئن شوید که @ را برای فیلد ورودی ایمیل با ظاهر کردن پیامهایی مانند «لطفا یک آدرس ایمیل معتبر وارد کنید» وارد کردهاید.
- “این فیلد الزامی است” (شما نمی توانید این قسمت را خالی بگذارید)
به این می گویند اعتبار سنجی. هنگامی که جزئیات خود را در یک وب سایت فرم وارد می کنید، مرورگر و/یا وب سرور بررسی می کند که داده ها در قالب صحیح و در محدودیت های تعیین شده توسط برنامه کاربردی هستند.
اعتبار سنجی فرم فرآیند تأیید صحت، کامل بودن و رعایت معیارهای مشخص شده در فرم HTML قبل از ارسال به سرور است.
در صورتی که اطلاعات به درستی فرمت شده باشند، برنامه اجازه می دهد تا داده ها به سرور ارسال شوند. اگر اطلاعات به درستی قالب بندی نشده باشد، به کاربر یک پیام خطایی می دهد که توضیح می دهد چه چیزی باید اصلاح شود.
ساخت یک فرم
بیایید یک صفحه وب فرم بسازیم تا درک خود را از اعتبار سنجی فرم تقویت کنیم.
کد HTML
<div class="formContainer">
<header>
<h1>Sign In</h1>
<a href="https://dev.to/tracy4code/test1.html">CHECK</a>
</header>
<form id="myForm">
<div class="formDetails">
<label for="name">Name:</label>
<input type="text" id="name" name="name">
<div class="errorMessage"></div>
</div>
<div class="formDetails">
<label for="email">Email:</label>
<input type="email" id="email" name="email">
<div class="errorMessage"></div>
</div>
<div class="formDetails">
<label for="password">Password:</label>
<input type="password" id="password" name="password">
<div class="errorMessage"></div>
</div>
<div class="formDetails">
<label for="confirmpassword">Confirm Password:</label>
<input type="password" id="confirmPassword" name="confirmpassword">
<div class="errorMessage"></div>
</div>
<button id="button" type="submit">Submit</button>
</form>
</div>
- کد HTML فرمی را با چهار فیلد ورودی تعریف می کند:
name
،email
،password
، وconfirm password
. هر فیلد ورودی در یک عنصر div با یک کلاس پیچیده شده استformDetails
. - در زیر هر فیلد ورودی، یک عدد وجود دارد
div
عنصر با کلاسerrorMessage
. اینجاست که هر پیام خطای مربوط به فیلد ورودی مربوطه نمایش داده می شود. - این فرم همچنین دارای یک دکمه ارسال با شناسه دکمه است. این دکمه با کلیک کردن، ارسال فرم را فعال می کند.
کد CSS
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
body{
background-color: #021012;
font-family: sans-serif;
}
.formContainer{
width: 80%;
height: 85vh;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
background-color: #E2F4FD;
}
header{
text-align: center;
margin: 2rem 0;
font-weight: 600;
}
#myForm{
width: 90%;
margin: 1rem auto;
}
.formDetails{
margin: 1rem 0;
}
label{
display: block;
font-size: 1rem;
font-weight: 600;
margin-bottom: .4rem;
}
input{
width: 100%;
padding: .6rem 0;
outline: none;
font-size: 1rem;
}
input:focus{
outline: 1px solid #064247;
}
button{
margin: 1.1rem 0;
background-color: #053135;
color: #fff;
font-weight: 600;
border: none;
padding: .8rem 0;
width: 100%;
}
.errorMessage{
margin-top: .3rem;
font-size: .9rem;
font-weight: 600;
font-family: monospace;
}
.formDetails.success input {
border-color: #09c372;
outline: none;
}
.formDetails.error input {
border-color: #f2070e;
}
@media screen and (min-width: 1024px) {
.formContainer{
width: 30%;
}
}
- را
.formContainer
انتخابگر را تنظیم می کندwidth
از ظرف فرم به80%
عنصر والد، وheight
به85%
از ارتفاع درگاه دید، و با استفاده از آن را در مرکز صفحه قرار می دهدabsolute
موقعیت یابی وtransform
ویژگی –transform: translate(-50%, -50%)
. رنگ پس زمینه روی سایه روشن آبی تنظیم شده است –#021012
. - را
input
وbutton
انتخابگرها عرض را روی100%
از ظرف والد، بالشتک به0.6rem
در بالا و پایینinput
انتخابگر،outline
بهnone
، و اندازه فونت به1rem
. همچنین یک حالت فوکوس به انتخابگر ورودی اضافه شده است که ورودی را با a مشخص می کند1px solid
حاشیه در رنگی متفاوت - را
.formDetails.success
انتخابگر ورودی سبک ها را در عنصر ورودی اعمال می کند.formDetails
ظرف دارای یک کلاس ازsuccess
. رنگ حاشیه را روی سایه روشن سبز و طرح کلی را روی هیچ تنظیم می کند. - را
.formDetails.error
انتخابگر ورودی سبک ها را در عنصر ورودی اعمال می کند.formDetails
ظرف دارای یک کلاس ازerror
. رنگ حاشیه را روی سایه تیره قرمز قرار می دهد.
@media screen and (min-width: 1024px) {
.formContainer{
width: 30%;
}
}
- را
@media
rule یک پرسش رسانه ای ایجاد می کند که وقتی عرض صفحه بالای 1024 پیکسل است، سبک ها را اعمال می کند. در این مورد، عرض از.formContainer
روی 30 درصد عنصر والد تنظیم شده است. این باعث می شود ظرف فرم در صفحه های بزرگتر کوچکتر شود.
جاوا اسکریپت برای اعتبارسنجی
- کد به رویداد ارسال فرم گوش می دهد و به طور پیش فرض از ارسال فرم جلوگیری می کند. سپس اعتبارسنجی را در هر فیلد ورودی انجام می دهد و پیام های خطای مناسب را در قسمت نمایش می دهد
errorMessage
divs و کلاس های موفقیت و خطا را برای والدین اعمال می کندformDetails
div بر اساس نتیجه اعتبارسنجی.
const myForm = document.getElementById('myForm');
myForm.addEventListener('submit', (event) => {
event.preventDefault();
}
- برای هر
input
در فیلد، کد ابتدا مقدار ورودی را دریافت می کند و هر فضای خالی را کاهش می دهد. سپس مربوطه را دریافت می کندerrorMessage
div و عنصر ورودی با استفاده ازquerySelector
روش. اگر مقدار ورودی خالی باشد، کد پیام خطا را روی یک پیام مربوطه تنظیم می کند و کلاس خطا را به والد اعمال می کند.formDetails
بخش اگر مقدار ورودی خالی نباشد، کد پیام خطا را پاک میکند و کلاس موفقیت را برای والدین اعمال میکند.formDetails
بخش
const name = myForm.elements.name.value.trim();
const nameError = document.querySelector('#name + .errorMessage');
const nameInput = document.getElementById('name');
if (name === '') {
nameError.textContent="Name is required.";
nameInput.parentNode.classList.add('error');
nameInput.parentNode.classList.remove('success');
} else {
nameError.textContent="";
nameInput.parentNode.classList.add('success');
nameInput.parentNode.classList.remove('error');
}
- برای فیلد ورودی ایمیل، کد همچنین بررسی می کند که آیا ایمیل در قالب معتبری با استفاده از یک عبارت معمولی است یا خیر. اگر ایمیل نامعتبر باشد، کد پیام خطا را روی یک پیام مرتبط تنظیم میکند و کلاس خطا را برای والدین اعمال میکند.
formDetails
بخش
const email = myForm.elements.email.value.trim();
const emailError = document.querySelector('#email + .errorMessage');
const emailInput = document.getElementById('email');
if (email === '') {
emailError.textContent="Email is required.";
emailInput.parentNode.classList.add('error');
emailInput.parentNode.classList.remove('success');
} else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
emailError.textContent="Please enter a valid email address.";
emailInput.parentNode.classList.add('error');
emailInput.parentNode.classList.remove('success');
} else {
emailError.textContent="";
emailInput.parentNode.classList.add('success');
emailInput.parentNode.classList.remove('error');
}
- برای قسمت ورودی رمز عبور، کد همچنین بررسی می کند که آیا رمز عبور حداقل 8 کاراکتر است یا خیر. اگر رمز عبور کمتر از 8 کاراکتر باشد، کد پیغام خطا را روی یک پیام مرتبط تنظیم می کند و کلاس خطا را برای والدین اعمال می کند.
formDetails
بخش
const password = myForm.elements.password.value.trim();
const passwordError = document.querySelector('#password + .errorMessage');
const passwordInput = document.getElementById('password');
if (password === '') {
passwordError.textContent="Password is required.";
passwordInput.parentNode.classList.add('error');
passwordInput.parentNode.classList.remove('success');
} else if (password.length < 8) {
passwordError.textContent="Password is expected to be 8 characters.";
passwordInput.parentNode.classList.add('error');
passwordInput.parentNode.classList.remove('success');
} else {
passwordError.textContent="";
passwordInput.parentNode.classList.add('success');
passwordInput.parentNode.classList.remove('error');
}
- برای قسمت تأیید رمز ورود، کد همچنین بررسی می کند که آیا رمز عبور تأیید با رمز عبور مطابقت دارد یا خیر. اگر
confirm
رمز عبور مطابقت ندارد، کد پیام خطا را به یک پیام مرتبط تنظیم می کند و کلاس خطا را برای والدین اعمال می کند.formDetails
بخش
const confirmPassword = myForm.elements.confirmpassword.value.trim();
const confirmPasswordError = document.querySelector('#confirmPassword + .errorMessage');
const confirmPasswordInput = document.getElementById('confirmPassword');
if (confirmPassword === '') {
confirmPasswordError.textContent="Confirm Password is required.";
confirmPasswordInput.parentNode.classList.add('error');
confirmPasswordInput.parentNode.classList.remove('success');
} else if (confirmPassword !== password) {
confirmPasswordError.textContent="Passwords do not match.";
confirmPasswordInput.parentNode.classList.add('error');
confirmPasswordInput.parentNode.classList.remove('success');
} else {
confirmPasswordError.textContent="";
confirmPasswordInput.parentNode.classList.add('success');
confirmPasswordInput.parentNode.classList.remove('error');
}
- در مرحله آخر، کد بررسی میکند که آیا پیامهای خطای نمایش داده شده است یا خیر. اگر پیغام خطایی وجود نداشته باشد، کد فرم را ارسال می کند. در غیر این صورت از ارسال فرم جلوگیری می کند.
if (nameError.textContent === '' && emailError.textContent === '' && passwordError.textContent === '' && confirmPasswordError.textContent === '') {
myForm.submit();
}
});
نتیجه نهایی
آن را در Codepen بررسی کنید
اگر این مقاله برای شما مفید بود، لطفاً مطمئن شوید که برای پست های مفیدتر دنبال می کنید. همچنین از ایده های شما در مورد آنچه که علاقه مند به یادگیری هستید قدردانی می کنم،