The Magento application provides various ways to validate your form inputs. In this article, I will show you how to validate forms in Magento 2, using javascript.

To add validation to your form you need initiating validation

There are several ways to initiate form validation:
- Using the data-mage-init attribute

<form id="my-form" data-mage-init='{"validation": {}}'>
    ...
</form>

- Using the text/x-magento-init script type tag

<script type="text/x-magento-init">
    {
        "#my-form": {
            "validation": {}
        }
    }
</script>

To apply validation rules to your input fields

In Your custom form you can set validation rule for your field by using one of the following methods listed here:
- Method #1: Use “data-validate” attribute

<input id="field-name" type="text" data-validate='{"required":true}'/

- Method #2: Use rule name as an attribute

<input id="field-1" ... required="true"/>

- Method #3: Use rule name as class name

<input id="field-1" ... class="input-text required-entry"/>

- Method #4: Set rule in data-mage-init attribute of form tag

<form ... data-mage-init='{"validation": {"rules": {"field-1": {"required":true}}}}'>
    ...
</form>

List of some form validation rules

  • validate-password
  • alphanumeric
  • letters-only
  • no-whitespace
  • max-words
  • validate-email
  • validate-url
  • validate-digits
  • validate-range
  • validate-identifier
  • letters-only
  • alphanumeric
  • No-whitespace
  • phoneUS
  • phoneUK
  • etc,...
    You can check these all validation logic in the file: lib/web/mage/validation.js

Example
We create a custom form and add validation for the form field. In this form we used the “data-mage-init” attribute to initiate validation for the form.

<form class="form" id="custom-form" method="post" autocomplete="off" data-mage-init='{"validation": {}}'>
   <fieldset class="fieldset">
       <legend class="legend">
        <span>Form Information</span>
       </legend>
       <div class="field required">
           <label for="email_address" class="label">
           <span>Email</span>
           </label>
       <div class="control">
            <input type="email" name="email" id="email" value=" "  title="Email"       data-validate="{required:true,  'validate-email':true}">
        </div>
       </div>
       <div class="field name required">
           <label class="label" for="name"><span>Name</span></label>
           <div class="control">
               <input name="name" id="field-2" title="Name" value="" class="input-text" type="text" data-validate="{required:true}"/>
           </div>
       </div>
   </fieldset>
   <div class="actions-toolbar">
       <div class="primary">
           <button type="submit" class="action submit primary" title="Submit"><span>Submit</span></button>
       </div>
   </div>
</form>

So we have learned how to validate forms using javascript with library validation.js of Magento 2. Hopefully, this article can help you solve your problem.