AngularJS中的表单验证

摘要:
$“;$scope.pwdRegx=”[a-zA-Z0-9]*“;*电话号码不能为空*移动电话号码地址非法将输入type=数字设置为估计时间分钟*请估计时间电子邮件URL效果是实时的,非常令人印象深刻。2.使用ngMessages验证表单需要您编写自己的代码来判断上述每个验证。ngMessages提供了一种更简洁的方法https://docs.angularjs.org/api/ngMessages/directive/ngMessagesangular.module ;输入您的名称:myForm.myName.$error={{myForm.myName.$error | json}}˂!但在天使身上,只需要记住一件事:准备好你的数据,把剩下的交给天使。
AngularJS中的表单验证

AngularJS自带了很多验证,什么必填,最大长度,最小长度...,这里记录几个有用的正则式验证

Note that novalidate is used to disable browser's native form validation. 用来禁用H5的原生验证.

1.使用angularjs的表单验证

正则式验证
只需要配置一个正则式,很方便的完成验证,理论上所有的验证都可以用正则式完成

    //javascript
    $scope.mobileRegx = "^1(3[0-9]|4[57]|5[0-35-9]|7[01678]|8[0-9])\d{8}$";
    $scope.emailRegx = "^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[.][a-z]{2,3}([.][a-z]{2})?$";
    $scope.pwdRegx = "[a-zA-Z0-9]*";
<div class="form-group">
    <input   name="mobile" type="text" ng-model="account.mobile" required ng-pattern="mobileRegx"/>
    <span   ng-show="registerForm.$submitted && registerForm.mobile.$error.required">*手机号不能为空</span>
    <span   ng-show="registerForm.$submitted && registerForm.mobile.$error.pattern">*手机号地址不合法</span>
</div>
<input type="text" ng-pattern="/[a-zA-Z]/" /> 

数字
设置input的type=number即可

    <div class="form-group col-md-6">
        <label for="password">
            预估时间
        </label>
        <div class="input-group">
            <input required type="number"   ng-model="task.estimated_time" name="time" />
            <span class="input-group-addon">分钟</span>
        </div>
        <span   ng-show="newTaskForm.$submitted && newTaskForm.time.$error.required">*请预估时间</span> 
    </div>

邮箱

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

URL

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

效果
效果是实时的,很带感
AngularJS中的表单验证第1张

2.使用ngMessages验证表单

相对于上面的每个验证都要自己写代码判断,ngMessages提供了一种更为简洁的方式
https://docs.angularjs.org/api/ngMessages/directive/ngMessages

angular.module('ngMessagesExample', ['ngMessages']);
<form name="myForm">
  <label>
    Enter your name:
    <input type="text"
           name="myName"
           ng-model="name"
           ng-minlength="5"
           ng-maxlength="20"
           required />
  </label>
  <pre>myForm.myName.$error = {{ myForm.myName.$error | json }}</pre>
  <!--需要配合 ng-if使用,否则一开始就显示出来了, 你摸了就会触发验证--> 
  <div ng-messages="myForm.myName.$error"   role="alert" ng-if="myForm.myName.$touched">
    <div ng-message="required">You did not enter a field</div>
    <div ng-message="minlength">Your field is too short</div>
    <div ng-message="maxlength">Your field is too long</div>
  </div>
</form>

简直是第二次解放啊。。。
form-touched

2.动态生成的表单的验证

如果你有一部分form的内容是动态生成的,数量和名字都不确定的时候,该如何验证这些生成的元素呢?其实维护一个动态的form本来就是个问题。但是在angular中,只需要记住一点:准备好你的数据,其他的交给angular。像下面这个例子,你只需要维护好一个数组,然后利用ng-repeat就可以快速的呈现到页面上。
dynamic-form2
dynamic-form1

其实动态的form和一般的form验证都是一致的,只是动态的form需要使用myForm[inout_name].$error的形式访问

    <!-- 动态显示状态的负责人 -->
    <div   ng-repeat="sta in task.status_table | orderBy : sta.sequence_order">
        <label>{{sta.status_name}} 负责人</label>
        <select required   ng-model="sta.user_id" ng-options="qa.id as qa.last_name+' '+qa.last_name for qa in taskUserList" name="{{sta.status_name}}">
        </select>
        <div ng-messages="newTaskForm[sta.status_name].$error" ng-if="newTaskForm.$submitted || newTaskForm[sta.status_name].$touched">
            <p   ng-message="required">*请选择负责人</p>
        </div>
    </div>

3. 必填项加亮显示

有些表单我们不希望粗暴的在下面添加文字信息提示验证,而是希望更简洁的方式,如:加亮边框,突出显示
warn-validate
需要做的只是在required验证没通过的时候添加class,改变元素的样式即可

        <form name="loginForm" novalidate ng-submit="loginPost()"   ng-hide="login">
            <fake-autocomplete></fake-autocomplete>
            <div class="form-group">
                <input name="user_name" required maxlength="50" type="text"   placeholder="手机号或邮箱" ng-model="account.user_name" ng-class="{warn:loginForm.$submitted && loginForm.user_name.$error.required}">
            </div>
            <div class="form-group">
                <input name="password" required type="password" maxlength="50" placeholder="密码" ng-model="account.password" ng-class="{'form-control':1,warn:loginForm.$submitted && loginForm.password.$error.required}">
            </div>
            <button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-lock"></span> 登录</button>
        </form>
.warn {
    border-color: #f78d8d !important;
    outline: 0 !important;
    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgb(239, 154, 154) !important;
    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(239, 154, 154) !important;
}

4. HTML5的验证属性

其实上面用到的这些个属性都是html5提供的,详细的看下面的文章
http://blog.csdn.net/sh_king/article/details/48713949
http://www.tuicool.com/articles/RjQZzm

1.输入型控件

Input type

用途

说明

email

电子邮件地址文本框

 

url

网页URL文本框

 

number

数值的输入域

属性 值 描述

max number 规定允许的最大值

min number 规定允许的最小值

step number 规定合法的数字间隔(如果 step="3",则合法的数是 -3,0,3,6 等)

value number 规定默认值

range

特定值的范围的数值,以滑动条显示

属性 值 描述

max number 规定允许的最大值

min number 规定允许的最小值

step number 规定合法的数字间隔(如果 step="3",则合法的数是 -3,0,3,6 等)

value number 规定默认值

Date pickers

日期,时间选择器

仅Opera9+支持,包含date, month, week, time, datetime, datetime-local

search

用于搜索引擎,比如在站点顶部显示的搜索框

与普通文本框用法一样,只不过这样更语文化

color

颜色选择器

仅Opera支持

2.表单验证

名称

用途

用法

valueMissing

确保控件中的值已填写

将required属性设为true,

<input type="text"required="required"/>

typeMismatch

确保控件值与预期类型相匹配

<input type="email"/>

patternMismatch

根据pattern的正则表达式判断输入是否为合法格式

<input type="text" pattern="[0-9]{12}"/>

toolong

避免输入过多字符

设置maxLength,<textarea id="notes" name="notes" maxLength="100"></textarea>

rangeUnderflow

限制数值控件的最小值

设置min,<input type="number" min="0" value="20"/>

rangeOverflow

限制数值控件的最大值

设置max,<input type="number" max="100" value="20"/>

stepMismatch

确保输入值符合min,max,step的设置

设置max min step,<input type="number" min="0" max="100" step="10" value ="20"/>

customError

处理应用代码明确设置能计算产生错误

例如验证两次输入的密码是否一致,等会DEMO细说

免责声明:文章转载自《AngularJS中的表单验证》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇实验四:xl命令的常见子命令以及操作[转]开发者必备的6款源码搜索引擎下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

通过JS,全选当前页面所有的复选框

  最近在做项目时,遇到一个这样的需求,就是在多级菜单中,选中二级的复选框,默认将它下面的三级复选框全部选中,若选中一级的复选框,默认的将它下面的二级的和三级的复选框全部选中,通过JS,可以得到当前页面所有的复选框,但对于如何判断子级的复选框也能选中,就有些不太明白了,向朋友请教了下,呵呵,终于拨云见天了,感谢,方法如下,给遇到我类似需求的朋友一个参考!...

html 通过input video canvas 打开摄像头 定制相机

在机缘巧合之下,了解到用HTML5和javascript调用摄像头来实现拍照功能,今天就把大致原理写下来。页面布局很简单,就是一个input标签,两个HTML5元素video、canvas和一个button按钮。video元素带有开启视频功能的函数,canvas元素带有捕捉图像功能的函数。 源代码如下: <!doctype html><h...

移动端通过ajax上传图片(文件)并在前台展示——通过H5的FormData对象

前些时候遇到移动端需要上传图片和视频的问题,之前一直通过ajax异步的提交数据,所以在寻找通过ajax上传文件的方法。发现了H5里新增了一个FormData对象,通过这个对象可以直接绑定html中的form元素,然后通过ajax提交的时候直接提交这个对象就好了。 在移动端调用视频和音频: <input type="file"accept="image...

生产环境服务器安全策略与系统性能优化评估

生产环境服务器安全策略与系统性能优化评估 1. Linux的运维经验分享与故障排查思路 1.1 线上服务器安装基本策略和经验 精简安装策略: 仅安装需要的,按需安装,不用不装 开发包,基本网络包,基本应用包 1.1.1 CentOS-6.x 1.1.2 CentOS-7.x 盘系统-默认按照分区方式数据盘单独挂载 1.2 线上服务器网络设置经...

css3写的实用表单美化

<!DOCTYPE html> <!--[if IE 7 ]> <html lang="en" class="ie7"> <![endif]--> <!--[if IE 8 ]> <html lang="en" class="ie8"> <![endif]--> <!...

Django 之 Form 组件

常用功能 From 组件主要有以下几大功能: 生成 HTML 标签 验证用户数据(显示错误信息) HTML Form 提交保留上次提交数据 初始化页面显示内容 小试牛刀 下面我们通过 Form 组件来生成 HTML 标签和验证用户提交的数据以及保留上次提交的数据。 创建 Form 类 form_verify.py from django import...