<div class="p-4">
 <form id="myform" method="post" action="https://api.form-action.in">
  <div class="mb-2">
  <label for="myform_firstname">First Name:</label><br/>
  <input type="text" id="myform_firstname" name="firstname"/>
  </div>
   <div class="mb-2">
  <label for="myform_lastname">Last Name:</label><br/>
  <input type="text" id="myform_lastname" name="lastname"  />
  </div>
  <div class="mb-2">
  <label for="myform_phone">Phone:</label><br/>
  <input type="text" id="myform_phone" name="phone" />
  </div>
  <div class="mb-2">
  <label for="myform_email">Email:</label><br/>
  <input type="text" id="myform_email" name="email" />
  </div>
  <div class="mt-2">
    <button type="submit">Submit</button>
  </div>
  </form>
</div>
.error
{
  color: red;
  size: 80%
}
.hidden
{
  display:none;
}

document.getElementById('myform').addEventListener('submit', validateForm);

function validateForm(event) 
{
    removeErrorMessages();
   if(validateFirstName() &&
      validateLastName() && 
      validatePhoneNumber()
      )
    {
        return true;
    }
    else
      {
        event.preventDefault();
        return false;
      }
  
}

function showError(element_id, message)
{
  var element = document.getElementById(element_id);
  var error_div = document.createElement('div');
  error_div.id = element_id+'_error';
  error_div.className='error';
  error_div.innerHTML = message;
  element.parentNode.insertBefore(error_div, element.nextSibling);
  
}
function removeElementsByClass(rootElement,className)
{
    var elements = rootElement.getElementsByClassName(className);
    while(elements.length > 0)
    {
        elements[0].parentNode.removeChild(elements[0]);
    }
}
function removeErrorMessages()
{
  removeElementsByClass(document.getElementById('myform'), 'error');
}

function validatePhoneNumber() 
{
    var phone = document.getElementById('myform_phone').value;
    var re = /^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/im;
    if(!phone || !re.test(phone))
      {
        showError("myform_phone", "Please enter a valid phone number");
        return false;
      }
  return true;
}

function validateFirstName()
{
  var first_name =      document.getElementById('myform_firstname').value;
  if(!first_name || first_name.length < 2)
    {
       showError("myform_firstname", "Please enter your FirstName");
       return false;
    }
    return true;
}
function validateLastName()
{
  var last_name =      document.getElementById('myform_lastname').value;
  if(!last_name || last_name.length < 2)
    {
       showError("myform_lastname", "Please enter your LastName");
       return false;
    }
    return true;
}



External CSS

  1. https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css

External JavaScript

This Pen doesn't use any external JavaScript resources.