• AngularJs轻松入门(六)表单校验


    表单数据的校验对于提高WEB安全性意义不大,因为服务器接收到的请求不一定来自我们的前端页面,有可能来自别的站点,黑客可以自己做一个表单,把数据提交到我们的服务器(即跨站伪造请求),这样就绕过了前端页面的校验。如果对HTTP协议比较熟,甚至还可以在程序中手动构造一段HTTP请求发到服务器,所以服务器端的数据校验绝对是必不可少的。

    WEB前端数据校验的意义在于改善用户体验,用户不用等到將数据提交到服务器后才知道哪些数据是不合法的。

    使用AngularJs对表单元素进行校验是相当方便的,我们来看一下可以在input元素上使用的所有校验选项。

    1.必填项

    验证某个表单输入是否已填写,只要在输入字段元素上添加HTML5标记required即可:

    `<input type="text" required />

    2. 最小长度

    验证表单输入的文本长度是否大于某个最小值,在输入字段上使用AngularJS指令ng-minleng= “{number}”:

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

    3. 最大长度

    验证表单输入的文本长度是否小于或等于某个最大值,在输入字段上使用AngularJS指令ng-maxlength=”{number}”:
    <input type="text" ng-maxlength="20" />

    4. 模式匹配

    使用ng-pattern=”/PATTERN/”来确保输入能够匹配指定的正则表达式:
    <input type="text" ng-pattern="[a-zA-Z]" />

    5. 电子邮件

    验证输入内容是否是电子邮件,只要像下面这样将input的类型设置为email即可:
    <input type="email" name="email" ng-model="user.email" />

    6. 数字

    验证输入内容是否是数字,将input的类型设置为number:
    <input type="number" name="age" ng-model="user.age" />

    7. URL

    验证输入内容是否是URL,将input的类型设置为 url:
    <input type="url" name="homepage" ng-model="user.facebook_url" />

    我们看一下具体的一个案例代码:

    <!DOCTYPE html>
    <html ng-app="loginMod">
    <head lang="en">
        <meta charset="UTF-8">
        <script type="text/javascript" src="angular-1.3.0.14/angular.js"></script>
        <script type="text/javascript" src="angular-1.3.0.14/angular-messages.js"></script>
        <title>tutorial06_1</title>
        <style>
            input.ng-invalid {
                border: 1px solid red;
            }
            input.ng-valid {
                border: 1px solid green;
            }
        </style>
    </head>
    <body>
    <div>
        <form name="loginForm" novalidate ng-submit="login()"  ng-controller="LoginController">
            <div style="280px;float:left">
                <label>用户名:</label>
                <input type="text" placeholder="请输入用户名" name="uname" ng-model="uname" ng-minlength=
                        3 ng-maxlength=10 required />
            </div>
            <div class="error" ng-messages="loginForm.uname.$error" style="color:red;">
                <div ng-message="required">用户名不能为空</div>
                <div ng-message="minlength">用户名长度至少为3</div>
                <div ng-message="maxlength">用户名长度不能超过10</div>
            </div>
            <br/><br/>
            <button type="submit">提交</button>
        </form>
    </div>
    <script>
        var loginMod = angular.module('loginMod', ['ngMessages']);
        loginMod.controller("LoginController",function($scope,$log){
            $scope.login = function()
            {
                $log.info("点击了按钮");
            }
        });
    </script>
    </body>
    </html>

    表单校验作为AngularJs的一个ngMessages模块封装在angular-messages.js文件中,我们必须引入它:

    <script type="text/javascript" src="angular-1.3.0.14/angular-messages.js">

    除此之外还要告诉AngularJs將ngMessages作为应用程序的依赖模块引入,像下面这个样子:

    var loginMod = angular.module('loginMod', ['ngMessages']);

    required指定文本框为必输项,ng-minlength指定最小长度,ng-maxlength指定最大长度,校验工作是AngularJs内部完成的,我们只需要定义不满足条件时的提示信息:

    <div class="error" ng-messages="loginForm.uname.$error" style="color:red;">
                <div ng-message="required">用户名不能为空</div>
                <div ng-message="minlength">用户名长度至少为3</div>
                <div ng-message="maxlength">用户名长度不能超过10</div>
     </div>

    最后我们在浏览器中看一下效果:

    这里写图片描述

    我们还可以把提示信息写在一个单独的errors.html文件中:

    <div ng-message="required">用户名不能为空</div>
    <div ng-message="minlength">用户名长度至少为3</div>
    <div ng-message="maxlength">用户名长度不能超过10</div>
    

    然后在页面中使用ng-messages-include属性引入这些信息:

     <div class="error" ng-messages="loginForm.uname.$error" 
          style="color:red;" ng-messages-include="errors/errors.html">
     </div>

    源码地址:https://github.com/rongbo-j/angularjs

  • 相关阅读:
    图片的像素和位图相关的知识
    LeetCode第四十四题-字符串匹配
    LeetCode第四十三题-字符串相乘
    LeetCode第四十二题-可装雨水的容量
    LeetCode第四十一题-寻找数组中的最小的缺失正整数
    LeetCode第四十题-求组合所有可能性(2)
    LeetCode第三十九题-求组合所有可能性
    LeetCode第三十八题-报数
    LeetCode第三十七题-实现数独
    LeetCode第三十六题-判断九宫格是否有效
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468895.html
Copyright © 2020-2023  润新知