Beginner's Guide to Client-Side Validation with JavaScript

Rashmi Mishra
0

JavaScript Validation
A Beginner's Guide

JavaScript validation is the process of ensuring that the data entered by a user in a form is correct and meets the expected format before it is submitted to the server. Unlike HTML validation, which only provides basic checks, JavaScript validation allows you to implement more complex and dynamic validation rules. It is performed on the client-side, meaning the browser checks the data before sending it to the server.

Why Use JavaScript Validation?

1.  Improves User Experience: JavaScript validation can provide immediate feedback to users, helping them correct mistakes as they type.

2.  Reduces Server Load: By catching errors before data is submitted to the server, you reduce the number of invalid requests sent to the server.

3.  Ensures Data Integrity: Ensures that only valid data reaches the server, reducing the risk of errors and ensuring better data quality.

Where is JavaScript Validation Used?

JavaScript validation is commonly used for:

  • Form fields (text boxes, radio buttons, checkboxes, etc.)
  • Email addresses (check if the format is correct)
  • Phone numbers (validate correct number length or format)
  • Passwords (check for minimum length, uppercase, lowercase, numbers, etc.)
  • Date fields (ensure proper date formatting)

How Does JavaScript Validation Work?

JavaScript validation works by defining validation rules for the form fields and then checking if the input meets those rules when the user submits the form.

Here are the key steps for performing JavaScript validation:

1.  Create the Form: Write an HTML form where users will input data.

2.  Write Validation Functions: Define JavaScript functions that check if the input values meet the required conditions.

3.  Bind the Validation to the Form Submission: Attach the validation functions to the form's submit event so that the validation is triggered when the user tries to submit the form.

4.  Display Feedback: If the input data is invalid, display error messages so that the user can fix them before submitting.

Basic Example of JavaScript Validation

Below is a simple form with JavaScript validation for a "Name" and "Email" field. The validation ensures that both fields are filled out and that the email address is in the correct format.

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>JavaScript Form Validation Example</title>

</head>

<body>

    <h2>Registration Form</h2>

    <form id="registrationForm" onsubmit="return validateForm()">

        <label for="name">Name:</label>

        <input type="text" id="name" name="name"><br><br>

 

        <label for="email">Email:</label>

        <input type="email" id="email" name="email"><br><br>

 

        <input type="submit" value="Submit">

    </form>

 

    <script>

        function validateForm() {

            // Get the values of the form fields

            let name = document.getElementById("name").value;

            let email = document.getElementById("email").value;

 

            // Validate the Name field (should not be empty)

            if (name == "") {

                alert("Name must be filled out!");

                return false; // Prevent form submission

            }

 

            // Validate the Email field (should not be empty and must be a valid email format)

            let emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;

            if (email == "") {

                alert("Email must be filled out!");

                return false;

            } else if (!emailPattern.test(email)) {

                alert("Please enter a valid email address!");

                return false;

            }

 

            // If all validations pass, allow form submission

            return true;

        }

    </script>

</body>

</html>

Explanation of the Code

1.  HTML Form:

o    The form contains two fields: name and email, each of which is required to be filled in before submitting.

o    The onsubmit="return validateForm()" attribute ensures that the JavaScript function validateForm() is called when the user tries to submit the form.

2.  JavaScript Validation Function:

o    let name = document.getElementById("name").value;: This gets the value entered in the name field.

o    if (name == "") {...}: This checks if the name field is empty and shows an alert if it is. The return false; prevents the form from being submitted if validation fails.

o    let emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;: This regular expression checks if the email entered follows the correct format.

o    return true;: If all checks pass, the form is allowed to submit.

Common Validation Scenarios in JavaScript

1.  Text Fields: Check if the field is not empty.

if (document.getElementById("username").value == "") {

    alert("Username is required!");

    return false;

}

2.  Email Format: Ensure the email is in the correct format (e.g., example@domain.com).

let email = document.getElementById("email").value;

let emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;

if (!emailPattern.test(email)) {

    alert("Please enter a valid email address.");

    return false;

}

3.  Password Strength: Check if the password meets criteria like minimum length, containing numbers, or special characters.

let password = document.getElementById("password").value;

if (password.length < 8) {

    alert("Password must be at least 8 characters long.");

    return false;

}

4.  Radio Buttons and Checkboxes: Ensure that at least one checkbox or radio button is selected.

let termsAccepted = document.querySelector('input[name="terms"]:checked');

if (!termsAccepted) {

    alert("You must agree to the terms and conditions.");

    return false;

}

5.  Date and Time Fields: Check if the selected date or time is within a valid range.

let selectedDate = document.getElementById("date").value;

let currentDate = new Date().toISOString().split("T")[0];  // Get today's date

if (selectedDate < currentDate) {

    alert("Please select a future date.");

    return false;

}

Advantages of JavaScript Validation

  • Instant Feedback: Users get immediate feedback on errors, improving the user experience.
  • Reduced Server Load: Since errors are caught before the form is submitted, fewer invalid requests reach the server.
  • Enhanced Customization: JavaScript allows for highly customizable error messages, validation rules, and user interface behavior.

Disadvantages

  • Client-Side Only: JavaScript validation is not foolproof since users can disable JavaScript in their browsers. Always validate data on the server as well for security reasons.
  • Browser Dependency: The behavior of JavaScript may vary slightly across different browsers, though this has become less of an issue with modern browsers.

Conclusion

JavaScript validation is a powerful tool for improving the usability and functionality of forms on websites. By ensuring that users input the correct data before submitting it to the server, it reduces the chances of errors, enhances user experience, and ensures that the data submitted is of higher quality. However, remember that JavaScript validation should always be backed up with server-side validation for added security.

Assignments For Practice:

1. Basic Required Field Validation

Objective: Validate a form where the user must fill in their name, email, and password.

  • Task: Create a form with the fields:
    • Name (text)
    • Email (email)
    • Password (password)
  • Validation:
    • Ensure that all fields are filled out before submission.
    • Show appropriate error messages if any field is left empty.

<form id="basicForm">

    Name: <input type="text" id="name"><br>

    Email: <input type="email" id="email"><br>

    Password: <input type="password" id="password"><br>

    <input type="submit" value="Submit">

</form>


2. Email Format Validation

Objective: Validate if the email entered by the user follows the correct email format.

  • Task: Create a form with an email field.
  • Validation:
    • Check if the email follows the format user@domain.com using a regular expression.
    • Display an error message if the email format is invalid.

<form id="emailForm">

    Email: <input type="email" id="email"><br>

    <input type="submit" value="Submit">

</form>


3. Password Strength Validation

Objective: Validate the password to ensure it meets the strength criteria (at least 8 characters, one uppercase, one number).

  • Task: Create a form with a password field.
  • Validation:
    • Password should be at least 8 characters long.
    • Password should contain at least one uppercase letter and one number.
    • Display an error message if the password doesn't meet these criteria.

<form id="passwordForm">

    Password: <input type="password" id="password"><br>

    <input type="submit" value="Submit">

</form>


4. Date of Birth Validation

Objective: Validate that the entered date of birth is a valid date and the user is over 18 years old.

  • Task: Create a form with a date input for the date of birth.
  • Validation:
    • Ensure the date entered is not in the future.
    • Calculate if the user is at least 18 years old.
    • Display an error message if the conditions are not met.

<form id="dobForm">

    Date of Birth: <input type="date" id="dob"><br>

    <input type="submit" value="Submit">

</form>


5. Phone Number Validation

Objective: Validate if the phone number entered is in the correct format (e.g., (XXX) XXX-XXXX).

  • Task: Create a form with a phone number field.
  • Validation:
    • Check if the phone number follows the pattern (XXX) XXX-XXXX using a regular expression.
    • Display an error message if the phone number format is incorrect.

<form id="phoneForm">

    Phone Number: <input type="text" id="phone"><br>

    <input type="submit" value="Submit">

</form>


6. Checkbox Validation (Terms and Conditions)

Objective: Ensure the user has agreed to the terms and conditions before submitting the form.

  • Task: Create a form with:
    • A checkbox for "I agree to the terms and conditions"
  • Validation:
    • Ensure the checkbox is checked before allowing form submission.
    • Display an error message if the user does not check the box.

<form id="termsForm">

    <label for="terms">I agree to the terms and conditions</label>

    <input type="checkbox" id="terms"><br>

    <input type="submit" value="Submit">

</form>


7. Multiple Field Validation (Username and Password Match)

Objective: Ensure that the user enters the same password in both the "Password" and "Confirm Password" fields.

  • Task: Create a form with:
    • Username (text)
    • Password (password)
    • Confirm Password (password)
  • Validation:
    • Ensure the "Password" and "Confirm Password" fields match.
    • Show an error message if they don't match.

<form id="confirmPasswordForm">

    Username: <input type="text" id="username"><br>

    Password: <input type="password" id="password"><br>

    Confirm Password: <input type="password" id="confirmPassword"><br>

    <input type="submit" value="Submit">

</form>


8. File Upload Validation

Objective: Ensure that only image files (jpg, png, gif) are allowed for upload.

  • Task: Create a form with a file upload field.
  • Validation:
    • Check that the uploaded file is an image (jpg, png, or gif).
    • Display an error message if the file type is not allowed.

<form id="fileUploadForm">

    Upload Image: <input type="file" id="fileUpload"><br>

    <input type="submit" value="Upload">

</form>


9. Select Option Validation

Objective: Ensure that the user selects an option from a dropdown menu.

  • Task: Create a form with a dropdown (select) field to choose a country or city.
  • Validation:
    • Ensure the user selects a valid option.
    • Display an error message if no option is selected.

<form id="selectForm">

    Choose your country:

    <select id="country">

        <option value="">Select a country</option>

        <option value="USA">USA</option>

        <option value="Canada">Canada</option>

        <option value="India">India</option>

    </select><br>

    <input type="submit" value="Submit">

</form>


10. Numeric Range Validation (Age)

Objective: Ensure that the user enters an age between 18 and 100.

  • Task: Create a form with an age input field.
  • Validation:
    • Ensure the age is a number between 18 and 100.
    • Display an error message if the age is outside of this range.

<form id="ageForm">

    Age: <input type="number" id="age"><br>

    <input type="submit" value="Submit">

</form>


11. Credit Card Number Validation

Objective: Ensure that the credit card number entered is valid (Luhn algorithm).

  • Task: Create a form with a credit card number field.
  • Validation:
    • Ensure that the credit card number follows the correct format and passes the Luhn check.

<form id="creditCardForm">

    Credit Card Number: <input type="text" id="creditCard"><br>

    <input type="submit" value="Submit">

</form>


12. URL Validation

Objective: Validate that the entered URL is in the correct format (e.g., http://www.example.com).

  • Task: Create a form with a URL input field.
  • Validation:
    • Use a regular expression to ensure the URL is valid.

<form id="urlForm">

    URL: <input type="text" id="url"><br>

    <input type="submit" value="Submit">

</form>


Bonus: Multi-Step Form Validation

Objective: Implement validation on a multi-step form, ensuring that each step is validated before moving to the next one.

  • Task: Create a multi-step registration form with validation for each step.
    • Step 1: Name and Email
    • Step 2: Password and Confirm Password
    • Step 3: Date of Birth
  • Validation:
    • Validate each step before proceeding to the next.
    • Display error messages if any field is invalid.

SOLUTIONS

1. Basic Required Field Validation

<form id="basicForm">

    Name: <input type="text" id="name"><br>

    Email: <input type="email" id="email"><br>

    Password: <input type="password" id="password"><br>

    <input type="submit" value="Submit">

</form> 

<script>

document.getElementById("basicForm").onsubmit = function(event) {

    var name = document.getElementById("name").value;

    var email = document.getElementById("email").value;

    var password = document.getElementById("password").value;

    if (!name || !email || !password) {

        alert("All fields are required.");

        event.preventDefault(); // Prevent form submission

    }

};

</script>


2. Email Format Validation

<form id="emailForm">

    Email: <input type="email" id="email"><br>

    <input type="submit" value="Submit">

</form>

 <script>

document.getElementById("emailForm").onsubmit = function(event) {

    var email = document.getElementById("email").value;

    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;

   if (!email.match(emailPattern)) {

        alert("Please enter a valid email address.");

        event.preventDefault(); // Prevent form submission

    }

};

</script>


3. Password Strength Validation

<form id="passwordForm">

    Password: <input type="password" id="password"><br>

    <input type="submit" value="Submit">

</form>

 

<script>

document.getElementById("passwordForm").onsubmit = function(event) {

    var password = document.getElementById("password").value;

    var passwordPattern = /^(?=.*[A-Z])(?=.*\d).{8,}$/;

   

    if (!password.match(passwordPattern)) {

        alert("Password must be at least 8 characters long, contain at least one uppercase letter and one number.");

        event.preventDefault(); // Prevent form submission

    }

};

</script>


4. Date of Birth Validation

<form id="dobForm">

    Date of Birth: <input type="date" id="dob"><br>

    <input type="submit" value="Submit">

</form>

 

<script>

document.getElementById("dobForm").onsubmit = function(event) {

    var dob = new Date(document.getElementById("dob").value);

    var age = new Date().getFullYear() - dob.getFullYear();

   

    if (dob > new Date()) {

        alert("Date of birth cannot be in the future.");

        event.preventDefault(); // Prevent form submission

    } else if (age < 18) {

        alert("You must be at least 18 years old.");

        event.preventDefault(); // Prevent form submission

    }

};

</script>


5. Phone Number Validation

<form id="phoneForm">

    Phone Number: <input type="text" id="phone"><br>

    <input type="submit" value="Submit">

</form>

 

<script>

document.getElementById("phoneForm").onsubmit = function(event) {

    var phone = document.getElementById("phone").value;

    var phonePattern = /^\(\d{3}\) \d{3}-\d{4}$/;

   

    if (!phone.match(phonePattern)) {

        alert("Please enter a valid phone number in the format (XXX) XXX-XXXX.");

        event.preventDefault(); // Prevent form submission

    }

};

</script>


6. Checkbox Validation (Terms and Conditions)

<form id="termsForm">

    <label for="terms">I agree to the terms and conditions</label>

    <input type="checkbox" id="terms"><br>

    <input type="submit" value="Submit">

</form>

 

<script>

document.getElementById("termsForm").onsubmit = function(event) {

    var terms = document.getElementById("terms").checked;

   

    if (!terms) {

        alert("You must agree to the terms and conditions.");

        event.preventDefault(); // Prevent form submission

    }

};

</script>


7. Multiple Field Validation (Username and Password Match)

<form id="confirmPasswordForm">

    Username: <input type="text" id="username"><br>

    Password: <input type="password" id="password"><br>

    Confirm Password: <input type="password" id="confirmPassword"><br>

    <input type="submit" value="Submit">

</form>

 <script>

document.getElementById("confirmPasswordForm").onsubmit = function(event) {

    var password = document.getElementById("password").value;

    var confirmPassword = document.getElementById("confirmPassword").value;

     if (password !== confirmPassword) {

        alert("Passwords do not match.");

        event.preventDefault(); // Prevent form submission

    }

};

</script>


8. File Upload Validation

<form id="fileUploadForm">

    Upload Image: <input type="file" id="fileUpload"><br>

    <input type="submit" value="Upload">

</form>

 <script>

document.getElementById("fileUploadForm").onsubmit = function(event) {

    var file = document.getElementById("fileUpload").files[0];

    var allowedExtensions = ['jpg', 'png', 'gif'];

    var fileExtension = file.name.split('.').pop().toLowerCase();

      if (!allowedExtensions.includes(fileExtension)) {

        alert("Please upload an image file (jpg, png, or gif).");

        event.preventDefault(); // Prevent form submission

    }

};

</script>


9. Select Option Validation

<form id="selectForm">

    Choose your country:

    <select id="country">

        <option value="">Select a country</option>

        <option value="USA">USA</option>

        <option value="Canada">Canada</option>

        <option value="India">India</option>

    </select><br>

    <input type="submit" value="Submit">

</form>

<script>

document.getElementById("selectForm").onsubmit = function(event) {

    var country = document.getElementById("country").value;

      if (!country) {

        alert("Please select a country.");

        event.preventDefault(); // Prevent form submission

    }

};

</script>


10. Numeric Range Validation (Age)

<form id="ageForm">

    Age: <input type="number" id="age"><br>

    <input type="submit" value="Submit">

</form>

 <script>

document.getElementById("ageForm").onsubmit = function(event) {

    var age = document.getElementById("age").value;

       if (age < 18 || age > 100) {

        alert("Age must be between 18 and 100.");

        event.preventDefault(); // Prevent form submission

    }

};

</script>


11. Credit Card Number Validation

<form id="creditCardForm">

    Credit Card Number: <input type="text" id="creditCard"><br>

    <input type="submit" value="Submit">

</form>

 <script>

document.getElementById("creditCardForm").onsubmit = function(event) {

    var creditCard = document.getElementById("creditCard").value;

    var cardPattern = /^[0-9]{13,19}$/; // Basic validation for 13 to 19 digits

      if (!creditCard.match(cardPattern)) {

        alert("Please enter a valid credit card number.");

        event.preventDefault(); // Prevent form submission

    }

};

</script>


12. URL Validation

<form id="urlForm">

    URL: <input type="text" id="url"><br>

    <input type="submit" value="Submit">

</form>

<script>

document.getElementById("urlForm").onsubmit = function(event) {

    var url = document.getElementById("url").value;

    var urlPattern = /^(https?:\/\/)?([\w-]+\.)+[\w-]+(\/[\w-]*)*\/?$/;

    if (!url.match(urlPattern)) {

        alert("Please enter a valid URL.");

        event.preventDefault(); // Prevent form submission

    }

};

</script>


Bonus: Multi-Step Form Validation

<form id="multiStepForm">

    <!-- Step 1: Name and Email -->

    <div id="step1">

        Name: <input type="text" id="name"><br>

        Email: <input type="email" id="email"><br>

        <input type="button" value="Next" onclick="nextStep(1)">

    </div>

    <!-- Step 2: Password and Confirm Password -->

    <div id="step2" style="display: none;">

        Password: <input type="password" id="password"><br>

        Confirm Password: <input type="password" id="confirmPassword"><br>

        <input type="button" value="Next" onclick="nextStep(2)">

    </div>

    <!-- Step 3: Submit -->

    <div id="step3" style="display: none;">

        <input type="submit" value="Submit">

    </div>

</form>

<script>

function nextStep(step) {

    if (step === 1) {

        var name = document.getElementById("name").value;

        var email = document.getElementById("email").value;

        if (!name || !email) {

            alert("Please fill in all fields.");

            return;

        }

         document.getElementById("step1").style.display = "none";

        document.getElementById("step2").style.display = "block";

    } else if (step === 2) {

        var password = document.getElementById("password").value;

        var confirmPassword = document.getElementById("confirmPassword").value;

        if (password !== confirmPassword) {

            alert("Passwords do not match.");

            return;

        }

        document.getElementById("step2").style.display = "none";

        document.getElementById("step3").style.display = "block";

    }

}

</script>

Tags

Post a Comment

0Comments

Post a Comment (0)