برنامه نویسی

اعتبار سنجی فرم با جاوا اسکریپت – انجمن 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 بررسی کنید

اگر این مقاله برای شما مفید بود، لطفاً مطمئن شوید که برای پست های مفیدتر دنبال می کنید. همچنین از ایده های شما در مورد آنچه که علاقه مند به یادگیری هستید قدردانی می کنم،

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا