详解HTML5中表单验证的8种方法介绍


Posted in HTML / CSS onDecember 19, 2016

在深人探讨表单验证之前,让我们先思考一下表单验证的真实含义。就其核心而言,表单验证是一套系统,它为终端用户检测无效的控件数据并标记这些错误。换言之,表单验证就是在表单提交服务器前对其进行一系列的检查并通知用户纠正错误。

但是真正的表单验证是什么?

是一种优化。

之所以说表单验证是一种优化,是因为仅通过表单验证机制不足以保证提交给服务器的表单数据是正确和有效的。另一方面,设计表单验证是为了让Web应 用更快地抛出错误。换句话说,最好利用浏览器内置的处理机制来告知用户网页内包含无效的表单控件值。过去,数据在网络上转一圈,仅仅是为了让服务器通知用 户他输入了错误的数据。如果浏览器完全有能力让错误在离开客户端之前就被捕获到,那么我们应该利用这个优势。

不过,浏览器的表单检查还不足以处理所有的错误。

话虽如此,HTML5还是引入了八种用于验证表单控件的数据正确性的方法。让我们依次了解一下,不过先要介绍一下用于反馈验证状态的ValidityState对象。

在支持Html5表单验证的浏览器中,可以通过表单控件来访问ValidityState对象:

var valCheck = document.myForm.myInput.validity;

这行代码获取了名为myInput的表单元素的ValidityState对象。对象包含了对所有八种验证状态的引用,以及最终验证结果。

调用方式如下:

valCheck.valid

执行完毕,我们会得到一个布尔值,它表示表单控件是否已通过了所有的验证约束条件。可以把valid特性看做是最终验证结果:如果所有八个约束条件都通过了,valid特性就是true,否则,只要有一项约束没通过,valid标志都是false。

如前所述,任何表单元素都有八个可能的验证约束条件。每个条件在ValidityState对象中都有对应的特性名,可以用适当的方式访问。让我们逐一分析,看看它们是如何与表单控件关联的,以及如何基于ValidityState对象来对它们进行检查:

1、valueMissing

目的:确保表单控件中的值已填写。

用法:在表单控件中将required特性设置为true。

示例:

<input type="text" name="myText" required>

详细说明:如果表单控件设置了required特性,那么在用户填写或者通过代码调用方式填值之前,控件会一直处于无效状态。例如,空的文本输入框无法通过必填检查,除非在其中输入任意文本。输入值为空时,valueMissing会返回true。

2、typeMismatch

目的:保证控件值与预期类型相匹配(如numbe、email、URL等).

用法:指定表单控件的type特性值。

示例:

<input type="email" name="myEmail">

详细说明:特殊的表单控件类型不只是用来定制手机键盘, 如果浏览器能够识别出来表单控件中的输入不符合对应的类型规则,比如email地址中没有@符号,或者number型控件的输入值不是有效的数字,那么浏 览器就会把这个控件标记出来以提示类型不匹配。无论哪种出错情况,typeMismatch将返回true。

3、patternMismatch

目的:根据表单控件上设置的格式规则验证输入是否为有效格式。

用法:在表单控件上设置pattern特性,井赋予适当的匹配规则。

示例:

<input type="text" name="creditcardnumber" pattern="[0-9]{16}" title="A credit
card number is 16 digits with no spaces or dashes">

详细说明:pattern特性向开发人员提供了一种强大而灵活的方式来为表单的控件值设定正则表达式验证机制。当为控件设置了pattern特性后,只要 输入控件的值不符合模式规则,patternMismatch就会返回true值。从引导用户和技术参考两方面考虑,你应该在包含pattern特性的表 单控件中设置title特性以说明规则的作用。

4、tooLong

目的:避免输入值包含过多字符。

用法:在表单控件上设置maxLength特性。

示例:

<input type="text" name="limitedText" maxLength="140">

详细说明:如果输入值的长度超过maxLength, tooLong特性会返回true。虽然表单控件通常会在用户输入时限制最大长度,但在有些情况下,如通过程序设置,还是会超出最大值。

5、rangeUnderflow

目的:限制数值型控件的最小值。

用法:为表单控件设置min特性,并赋予允许的最小值。

示例:

<input type="range" name="ageCheck" min="18">

详细说明:在需要做数值范围检查的表单控件中,数值很可能会暂时低于设置的下限。此时,ValidityState的rangeUnderflow特性将返回true。

6、rangeOverflow

目的:限制数值型控件的最大值。

用法:为表单控件设置max特性,并赋予允许的最大值。

示例:

<input type="range" name="kidAgeCheck" max="12">

详细说明:与rangeUnderflow类似,如果一个表单控件的值比max更大,特性将返回true。

7、stepMismatch

目的:确保输入值符合min、max及step即设置。

用法:为表单控件设置step特性,指定数值的增量。

示例:

<input type="range" name="confidenceLevel" min="0" max="100" step="5">

详细说明:此约束条件用来保证数值符合min、max和step的要求。换句话说,当前值必须是最小值与step特性值的倍数之和。例如,范围从0到100,step特性值为5,此时就不允许出现17,否则stepMismatch返回true值。

8、customError

目的:处理应用代码明确设置及计算产生的错误。

用法:调用setCustomValidity(message)将表单控件置于customError状态。

示例:

passwordConfirmationField.setCustomValidity("Password values do not match.");

详细说明:浏览器内置的验证机制不适用时,需要显示自定义验证错误信息。当输入值不符合语义规则时,应用程序代码应设置这些自定义验证消息。

自定义验证消息的典型用例是验证控件中的值是否一致。例如,密码和密码确认两个输人框的值不匹配。只要定制了验证消息,控件就会处于无效状态,并且customError返回true。要清除错误,只需在控件上调用setCustomValidity("")即可。

好了,以上就是HTML5中表单验证的8种基本方法,希望对初学者有所帮助。也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
CSS3弹性盒模型开发笔记(二)
Apr 26 HTML / CSS
CSS3 animation实现简易幻灯片轮播特效
Sep 27 HTML / CSS
CSS3 函数技巧 用css 实现js实现的事情(clac Counters Tooltip)
Aug 15 HTML / CSS
css3中less实现文字长阴影(long shadow)
Apr 24 HTML / CSS
关于css中margin的值和垂直外边距重叠问题
Oct 27 HTML / CSS
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
Jan 31 HTML / CSS
HTML5实现一个能够移动的小坦克示例代码
Sep 02 HTML / CSS
HTML5的postMessage的使用手册
Dec 19 HTML / CSS
3种方式实现瀑布流布局小结
Sep 05 HTML / CSS
浅谈Html5页面打开app的一些思考
Mar 30 HTML / CSS
canvas绘制图片drawImage使用方法
Sep 15 HTML / CSS
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
Apr 07 HTML / CSS
【HTML5】3D模型--百行代码实现旋转立体魔方实例
Dec 16 #HTML / CSS
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
Dec 16 #HTML / CSS
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
Dec 15 #HTML / CSS
canvas与html5实现视频截图功能示例
Dec 15 #HTML / CSS
详解html5 canvas常用api总结(二)--绘图API
Dec 14 #HTML / CSS
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
Dec 14 #HTML / CSS
详解使用HTML5 Canvas创建动态粒子网格动画
Dec 14 #HTML / CSS
You might like
php简单socket服务器客户端代码实例
2015/05/18 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
2019/05/28 PHP
jquery 批量上传图片实现代码
2010/01/28 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
2013/01/27 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
vue-cli入门之项目结构分析
2017/04/20 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
ReactJs实现树形结构的数据显示的组件的示例
2017/08/18 Javascript
js截取字符串功能的实现方法
2017/09/27 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
python中的set实现不重复的排序原理
2018/01/24 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
python爬虫 基于requests模块的get请求实现详解
2019/08/20 Python
Python Flask上下文管理机制实例解析
2020/03/16 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
PyCharm 光标变成黑块的解决方式
2021/02/06 Python
全球最大的跑步用品商店:Road Runner Sports
2016/09/11 全球购物
土地转让协议书范本
2014/04/15 职场文书
团队队名口号大全
2014/06/06 职场文书
学校班子个人对照检查材料思想汇报
2014/09/27 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
新兵入伍决心书
2015/09/22 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
解决Swagger2返回map复杂结构不能解析的问题
2021/07/02 Java/Android
golang 语言中错误处理机制
2021/08/30 Golang