'JavaScript Form Validation Failed With Custom Captcha Code

I'm actually working on a project for that I want to implement the client-side validation in the form using JS and every validation is working fine but the problem is that It still submitting the data where regex conditions are returning false.

Example: When in the Full Name (input box) the message shows "Invalid Name" but still it gets submitted. In that case, I want to return (focus()) the visitor to that particular input box.

I'm a newbie in JS so need some guidance regarding this.

const nameError = document.getElementById('full-name-error');
         const emailError = document.getElementById('email-error');
         const phoneNoError = document.getElementById('phone-no-error');
         const subjectError = document.getElementById('subject-error');
         const messageError = document.getElementById('message-error');
         const captchaError = document.getElementById('captcha-error');

         function validateName(){
            const name = document.getElementById('full-name').value;

               if (name.match(/[0-9$&+,:;=?@#|'<>.^*()%!-]/)){
                  nameError.innerHTML = 'Only Alphabets Are Allowed';
                  return false;
               }
               if (!name.match(/^[A-Za-z.]*\s{1}[A-Za-z]*$/)){
                  nameError.innerHTML = 'Invalid Full Name';
                  return false;
               }else {
                  nameError.innerHTML = 'Valid Name';
                  return true;
               }
         }

         function validateEmail(){
            const email = document.getElementById('email-address').value;

               if (!email.match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)){
                  emailError.innerHTML = 'Invalid Email Address';
                  return false;
               }else {
                  emailError.innerHTML = 'Valid Email-ID';
               return true;
               }
         }

         function validatePhoneNo(){
            const phone_no = document.getElementById('phone-number').value;

               if (phone_no.match(/[a-zA-Z$&+,:;=?@#|'<>.^*()%!-]/)){
                  phoneNoError.innerHTML = 'Only Number Are Allowed';
                  return false;
               }
               if (!phone_no.match(/^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/)){
                  phoneNoError.innerHTML = 'Invalid Phone Number';
                  return false;
               }else {
                  phoneNoError.innerHTML = 'Valid Phone Number';
               return true;
               }
         }

         function validateSubject(){
            const subject = document.getElementById('contact-subject').value;

               if (subject.length > 50){
                  subjectError.innerHTML = 'Maximum 50 Characters Allowed';
                  return false;
               }
               if (subject.match(/[$&+,:;=?@#|'<>.^*()%!-]/)){
                  subjectError.innerHTML = 'Special Characters Not Allowed';
                  return false;
               }
               if (!subject.match(/^.[0-9a-zA-Z ]{1,50}$/)){
                  subjectError.innerHTML = 'Invalid Subject';
                  return false;
               }
               else {
                  subjectError.innerHTML = 'Valid Subject';
                  return true;
               }
         }


         function validateMessage(){
            const message = document.getElementById('message').value;


               if (message.match(/[$+:;=#|\/~`'<>^{}*!]/)){
                  messageError.innerHTML = 'Only "@ & % , "" - . ? () []" Allowed';
                  return false;
               }

               if (message.length < 150){
                  messageError.innerHTML = 'Write Atleast 150 Characters';
                  return false;
               }
               
               else if (message.length > 500){
                  messageError.innerHTML = 'Maximum 500 Characters Allowed';
                  return false;
               }
               else {
                  messageError.innerHTML = 'Valid Message';
                  return true;
               }
         }

         function validateCaptchaCode(){
            const captcha = document.getElementById('CaptchaInput').value;
            const captchaData = document.getElementById('mainCaptcha').value;
            
            if (captcha != captchaData){
                  captchaError.innerHTML = 'Invalid Captcha';
                  event.preventDefault();
               }
            else {
                  captchaError.innerHTML = 'Valid Captcha';
                  return true;
            }

         }
         
window.addEventListener("load", Captcha);

function Captcha(){
     var alpha = new Array(
                              'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
                              'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', 
                              '0','1','2','3','4','5','6','7','8','9',
                              '@','#','$','%','&'
                           );
     var i;
     for (i=0;i<6;i++){
         var a = alpha[Math.floor(Math.random() * alpha.length)];
         var b = alpha[Math.floor(Math.random() * alpha.length)];
         var c = alpha[Math.floor(Math.random() * alpha.length)];
         var d = alpha[Math.floor(Math.random() * alpha.length)];
         var e = alpha[Math.floor(Math.random() * alpha.length)];
         var f = alpha[Math.floor(Math.random() * alpha.length)];
         }
         var code = a + '' + b + '' + '' + c + '' + d + '' + e + ''+ f;
         document.getElementById("mainCaptcha").innerHTML = code
           document.getElementById("mainCaptcha").value = code
      }



   function checkSubmission() {

      const captcha = document.getElementById('CaptchaInput').value;
      const captchaData = document.getElementById('mainCaptcha').value;

      if (document.contact_form.person_name.value == ""){
         document.contact_form.person_name.focus();
         nameError.innerHTML = 'Name Is Required';
      }    
      
      if (document.contact_form.email_id.value == ""){
         document.contact_form.email_id.focus();
         emailError.innerHTML = 'Email Is Required';
      }

      if (document.contact_form.phone_no.value == ""){
         document.contact_form.phone_no.focus();
         phoneNoError.innerHTML = 'Phone No Is Required';
      }

      if (document.contact_form.subject.value == ""){
         document.contact_form.subject.focus();
         subjectError.innerHTML = 'Subject Is Required';
      }

      if (document.contact_form.message.value == ""){
         document.contact_form.message.focus();
         messageError.innerHTML = 'Message Is Required';
      }

      if (document.contact_form.captcha_code.value == ""){
         document.contact_form.captcha_code.focus();
         captchaError.innerHTML = 'Captcha Is Required';
      }

      else if (captcha != captchaData){
         event.preventDefault();
      }

      else {
         return true;
      }

   } 
   #full-name-error, #email-error, #phone-no-error, #subject-error, #message-error,  #captcha-error  {
      color: red;
   }
   
   #mainCaptcha {
      color: blue;
      border: 3px solid grey;
      font-weight: bold;
      padding: 3px;
   }
                  <form id="request" class="main_form" name="contact_form">
                     <div class="row con-row">

                        <div class="col-md-12 con-col">
                           <div class="inputBox">
                              <input type="text" name="person_name" id="full-name" onkeyup="validateName()" autocomplete="off" required>
                              <span class="text">Full Name*</span>
                              <span class="line"></span>
                            </div>
                            <span id="full-name-error">-</span>
                        </div>

                        <div class="col-md-12 con-col">
                           <div class="inputBox">
                              <input type="text" name="email_id" id="email-address" onkeyup="validateEmail()" autocomplete="off" required>
                              <span class="text">Email Address*</span>
                              <span class="line"></span>
                            </div>
                            <span id="email-error">-</span>
                        </div>

                        <div class="col-md-12 con-col">
                           <div class="inputBox">
                              <input type="text" name="phone_no" id="phone-number" onkeyup="validatePhoneNo()" autocomplete="off" required>
                              <span class="text">Phone Number*</span>
                              <span class="line"></span>
                            </div>
                            <span id="phone-no-error">-</span>
                        </div>

                        <div class="col-md-12 con-col">
                           <div class="inputBox">
                              <input type="text" name="subject" id="contact-subject" onkeyup="validateSubject()" autocomplete="off" required>
                              <span class="text">Subject*</span>
                              <span class="line"></span>
                            </div>
                            <span id="subject-error">-</span>
                        </div>

                        <div class="col-md-12 con-col">
                           <div class="inputBox textarea">
                             <textarea name="message" id="message" onkeyup="validateMessage()" required></textarea>
                             <span class="text">Type Your Message*</span>
                             <span class="line"></span>
                           </div>
                           <span id="message-error">-</span>
                         </div>

                         <div class="col-md-12 con-col cap-col">
                           <div class="row">

                              <div class="col-5 cap-col-1">
                                 <div class="CaptchaBox">
                                    <p type="text" id="mainCaptcha" class="align-middle"></p>

                                 </div>
                              </div>

                              <div class="col-7 cap-col-2">
                                 <div class="inputBox">
                                    <input type="text" name="captcha_code" id="CaptchaInput" onkeyup="validateCaptchaCode()" autocomplete="off" required/>
                                    <span class="text">Enter Captcha*</span>
                                    <span class="line"></span>
                                  </div>
                              </div>

                           </div>
                           <span id="captcha-error">-</span>
                        </div>

                         <div class="col-md-12">
                           <button class="send_btn" type="submit" onclick="checkSubmission()">Send Now</button>
                         </div>

                     </div>
                  </form>


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source