Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

AngularJS 表单验证


AngularJS 可以验证输入数据。


表单验证

AngularJS 提供了客户端表单验证。

AngularJS 监控表单和输入字段(input、textarea、select)的状态,并让您通知用户当前状态。

AngularJS 还保存了关于它们是否被触碰、修改或未修改的信息。

您可以使用标准的 HTML5 属性来验证输入,也可以创建自己的验证函数。

单独的客户端验证不能保证用户输入的安全。 服务器端验证也是必要的。


必填

使用 HTML5 属性 required 指定输入字段必须填写

示例

输入字段是必填的

<form name="myForm">
  <input name="myInput" ng-model="myInput" required>
</form>

<p>输入的有效状态是:</p>
<h1>{{myForm.myInput.$valid}}</h1>
亲自试一试 »

电子邮件

使用 HTML5 类型 email 指定值必须是电子邮件

示例

输入字段必须是电子邮件

<form name="myForm">
  <input name="myInput" ng-model="myInput" type="email">
</form>

<p>输入的有效状态是:</p>
<h1>{{myForm.myInput.$valid}}</h1>
亲自试一试 »


表单状态和输入状态

AngularJS 不断更新表单和输入字段的状态。

输入字段具有以下状态

  • $untouched 该字段尚未被触碰
  • $touched 该字段已被触碰
  • $pristine 该字段尚未被修改
  • $dirty 该字段已被修改
  • $invalid 字段内容无效
  • $valid 字段内容有效

它们都是输入字段的属性,并且要么是 true 要么是 false

表单具有以下状态

  • $pristine 尚未修改任何字段
  • $dirty 一个或多个字段已被修改
  • $invalid 表单内容无效
  • $valid 表单内容有效
  • $submitted 表单已提交

它们都是表单的属性,并且要么是 true 要么是 false

您可以使用这些状态向用户显示有意义的消息。 例如,如果一个字段是必填的,而用户将其留空,您应该向用户发出警告

示例

如果字段已被触碰并且为空,则显示错误消息

<input name="myName" ng-model="myName" required>
<span ng-show="myForm.myName.$touched && myForm.myName.$invalid">姓名是必填项。</span>
亲自试一试 »

CSS 类

AngularJS 根据表单和输入字段的状态向其添加 CSS 类。

以下类将被添加到输入字段或从输入字段中删除

  • ng-untouched 该字段尚未被触碰
  • ng-touched 该字段已被触碰
  • ng-pristine 该字段尚未被修改
  • ng-dirty 该字段已被修改
  • ng-valid 字段内容有效
  • ng-invalid 字段内容无效
  • ng-valid-key 每个验证一个 key。 例如:ng-valid-required,当有多个需要验证的项目时很有用
  • ng-invalid-key 例如:ng-invalid-required

以下类将被添加到表单或从表单中删除

  • ng-pristine 尚未修改任何字段
  • ng-dirty 一个或多个字段已被修改
  • ng-valid 表单内容有效
  • ng-invalid 表单内容无效
  • ng-valid-key 每个验证一个 key。 例如:ng-valid-required,当有多个需要验证的项目时很有用
  • ng-invalid-key 例如:ng-invalid-required

如果它们所代表的值为 false,则这些类将被删除。

添加这些类的样式,为您的应用程序提供更好、更直观的用户界面。

示例

使用标准 CSS 应用样式

<style>
input.ng-invalid {
  background-color: pink;
}
input.ng-valid {
  background-color: lightgreen;
}
</style>
亲自试一试 »

表单也可以进行样式设置

示例

为未修改(原始)的表单和修改后的表单应用样式

<style>
form.ng-pristine {
  background-color: lightblue;
}
form.ng-dirty {
  background-color: pink;
}
</style>
亲自试一试 »

自定义验证

要创建您自己的验证函数稍微复杂一些; 您需要将一个新的指令添加到您的应用程序中,并在具有特定指定参数的函数中处理验证。

示例

创建您自己的指令,其中包含一个自定义验证函数,并使用 my-directive 引用它。

只有当值包含字符“e”时,该字段才有效

<form name="myForm">
<input name="myInput" ng-model="myInput" required my-directive>
</form>

<script>
var app = angular.module('myApp', []);
app.directive('myDirective', function() {
  return {
    require: 'ngModel',
    link: function(scope, element, attr, mCtrl) {
      function myValidation(value) {
        if (value.indexOf("e") > -1) {
          mCtrl.$setValidity('charE', true);
        } else {
          mCtrl.$setValidity('charE', false);
        }
        return value;
      }
      mCtrl.$parsers.push(myValidation);
    }
  };
});
</script>
亲自试一试 »

示例说明

在 HTML 中,将使用属性 my-directive 引用新指令。

在 JavaScript 中,我们首先添加一个名为 myDirective 的新指令。

请记住,在命名指令时,必须使用驼峰命名法, myDirective,但在调用它时,必须使用 - 分隔的名称,my-directive

然后,返回一个对象,在其中指定我们需要的 ngModel,即 ngModelController。

创建一个链接函数,它接受一些参数,其中第四个参数,mCtrl,是 ngModelController

然后指定一个函数,在本例中命名为 myValidation,它接受一个参数,该参数是输入元素的值。

测试值是否包含字母“e”,并将模型控制器的有效性设置为 truefalse

最后,mCtrl.$parsers.push(myValidation); myValidation 函数添加到其他函数的数组中,该数组将在每次输入值更改时执行。


验证示例

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<body>

<h2>验证示例</h2>

<form  ng-app="myApp"  ng-controller="validateCtrl"
name="myForm" novalidate>

<p>用户名:<br>
  <input type="text" name="user" ng-model="user" required>
  <span style="color:red" ng-show="myForm.user.$dirty && myForm.user.$invalid">
  <span ng-show="myForm.user.$error.required">用户名是必填项。</span>
  </span>
</p>

<p>电子邮件:<br>
  <input type="email" name="email" ng-model="email" required>
  <span style="color:red" ng-show="myForm.email.$dirty && myForm.email.$invalid">
  <span ng-show="myForm.email.$error.required">电子邮件是必填项。</span>
  <span ng-show="myForm.email.$error.email">无效的电子邮件地址。</span>
  </span>
</p>

<p>
  <input type="submit"
  ng-disabled="myForm.user.$dirty && myForm.user.$invalid ||
  myForm.email.$dirty && myForm.email.$invalid">
</p>

</form>

<script>
var app = angular.module('myApp', []);
app.controller('validateCtrl', function($scope) {
  $scope.user = 'John Doe';
  $scope.email = '[email protected]';
});
</script>

</body>
</html>
亲自试一试 »

HTML 表单属性 novalidate 用于禁用默认的浏览器验证。

示例说明

AngularJS 指令 ng-model 将输入元素绑定到模型。

模型对象有两个属性:useremail

由于 ng-show,只有当 user 或 email 为 $dirty$invalid 时,才会显示带有 color:red 的跨度。


×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.