Form Validation

Description

AngularJS makes it easy to handle client-side form validations.

To use form validations, we must ensure that the form has a name associated with it.

All input fields can have some basic validations, like minimum length, maximum length, etc. These are all available on the new HTML5 form attributes.

We can use the novalidate flag on the form element to prevent the validating.

Let's look at all the validation options we have that we can place on an input field:

Required

To mark a required field, we add the HTML5 tag, required, to the input field:

<input type="text" required />

Minimum Length

To set the minimum length for form input, we add the AngularJS directive ng-minlength="{number}" to the input field:

<input type="text" ng-minlength=5 />

Maximum Length

To set maximum length for a form input, we can add the AngularJS directive ng-maxlength="{number}":

<input type="text" ng-maxlength=20 />

Matches a Pattern

To ensure that an input matches a regex, we can use ng-pattern="/PATTERN/":

<input type="text" ng-pattern="[a-zA-Z]" />

Email

To validate an email address, we set the input type to email:

<input type="email" name="email" ng-model="user.email" />

Number

To validate an input field has a number, we set the input type to number:

<input type="number" name="age" ng-model="user.age" />

URL

To validate that an input represents a URL, set the input type to url:

<input type="url" name="homepage" ng-model="user.myurl" />

Example

The following code is revised from http://jsbin.com/ePomUnI/5/edit.


<!doctype html>
<html ng-app="myApp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.2/angular.js"></script>
<style id="jsbin-css">
input.ng-invalid {<!--  www  .j a va  2  s. c o m-->
  border: 1px solid red;
}

input.ng-valid {
  border: 1px solid green;
}
</style>
</head>
<body>
  
<form name="signup_form" novalidate ng-submit="signupForm()">
    <div class="row">
      <div class="large-12 columns">
        <label>Your name</label>
        <input type="text" 
            placeholder="Name" 
            name="name" 
            ng-model="signup.name" 
            ng-minlength=3 
            ng-maxlength=20 required />
       <div class="error" 
            ng-show="signup_form.name.$dirty && signup_form.name.$invalid">
        <small class="error" 
            ng-show="signup_form.name.$error.required">
            Your name is required.
        </small>
        <small class="error" 
                ng-show="signup_form.name.$error.minlength">
                Your name is required to be at least 3 characters
        </small>
        <small class="error" 
                ng-show="signup_form.name.$error.maxlength">
                Your name cannot be longer than 20 characters
        </small>
      </div>
      </div>
    </div>
      
    <div class="row">          
      <div class="large-12 columns">
        <label>Your email</label>
        <input type="email" 
          placeholder="Email" 
          name="email" 
          ng-model="signup.email" 
          ng-minlength=3 ng-maxlength=20 required />
        <div class="error" 
             ng-show="signup_form.email.$dirty && signup_form.email.$invalid">
          <small class="error" 
                 ng-show="signup_form.email.$error.required">
                 Your email is required.
          </small>
          <small class="error" 
                 ng-show="signup_form.email.$error.minlength">
                  Your email is required to be at least 3 characters
          </small>
          <small class="error" 
                 ng-show="signup_form.email.$error.email">
                 That is not a valid email. Please input a valid email.
          </small>
          <small class="error" 
                 ng-show="signup_form.email.$error.maxlength">
                  Your email cannot be longer than 20 characters
          </small>
        </div>
      </div>
    </div>
      
    <div class="large-12 columns">
      <label>Username</label>
        <input  type="text" 
                placeholder="Desired username" 
                name="username" 
                ng-model="signup.username" 
                ng-minlength=3 
                ng-maxlength=20 
                ensure-unique="username" required />
      <div class="error" ng-show="signup_form.username.$dirty && signup_form.username.$invalid">
        <small class="error" ng-show="signup_form.username.$error.required">Please input a username</small>
        <small class="error" ng-show="signup_form.username.$error.minlength">Your username is required to be at least 3 characters</small>
        <small class="error" ng-show="signup_form.username.$error.maxlength">Your username cannot be longer than 20 characters</small>
        <small class="error" ng-show="signup_form.username.$error.unique">That username is taken, please try another</small>
      </div>
    </div>  

    <button type="submit" ng-disabled="signup_form.$invalid" class="button radius">Submit</button>
</form>
<script id="jsbin-javascript">
angular.module('myApp', [])
.directive('ensureUnique', ['$http', function($http) {
  return {
    require: 'ngModel',
    link: function(scope, ele, attrs, c) {
      scope.$watch(attrs.ngModel, function() {
        $http({
          method: 'POST',
          url: '/api/check/' + attrs.ensureUnique,
          data: {'field': attrs.ensureUnique}
        }).success(function(data, status, headers, cfg) {
          c.$setValidity('unique', data.isUnique);
        }).error(function(data, status, headers, cfg) {
          c.$setValidity('unique', false);
        });
      });
    }
  };
}]);
</script>
</body>
</html>

Click to view the demo





















Home »
  AngularJS »
    AngularJS Tutorial »




Introduction
Buildin Filters
Buildin Directives