javascript表单验证
表单HTML
<form action="" method="post">
<fieldset class="login">
<legend>Login information</legend>
<label for="userName" class="hover">UserName:</label>
<input type="text" id="userName" class="required text" /><br />
<label for="password" class="hover">Password:</label>
<input type="text" id="password" class="required text" /><br />
</fieldset>
<fieldset>
<legend>Personal Information</legend>
<label for="name" class="hover">Name:</label>
<input type="text" id="name" class="required text" /><br />
<label for="email" class="hover">Email:</label>
<input type="text" id="email" class="required text email" /><br />
<label for="date" class="hover">Date:</label>
<input type="text" id="date" class="required text" /><br />
<label for="url" class="hover">Website:</label>
<input type="text" id="url" class="url text" value="http://" /><br />
<label for="phone" class="hover">Phone:</label>
<input type="text" id="phone" class="phone text" /><br />
<label for="age" class="hover">Age:</label>
<input type="checkbox" id="age" name="age" value="yes" /><br /> <input type="submit" value="Submit Form" class="submit" />
</fieldset>
</form>
表单的CSS样式
form {
font-family: Arial;
font-size: 14px;
width: 300px;
}
fieldset {
border: 1px solid #ccc;
margin-bottom: 10px;
}
fieldset.login input {
width: 125px;
}
legend {
font-weight: bold;
font-size: 1.1em;
}
label {
display: block;
width: 60px;
text-align: right;
float: left;
padding-right: 10px;
margin: 5px 0;
}
input {
margin: 5px 0;
}
input.text {
padding: 0 0 0 3px;
width: 172px;
}
input.submit {
margin: 15px 0 0 70px;
}
ul.errors {
list-style: none;
background: #ffcece;
padding: 3px;
margin: 3px 0 3px 70px;
font-size: 0.9em;
width: 165px;
}
表单JavaScript
var errMsg = {
//检查特定字段是否必填
required: {
msg: 'This field is required.',
test: function (obj, load) {
return obj.value.length > 0 && obj.value != obj.defaultValue;
}
},
//确保字段内容是正确的email地址
email: {
msg: 'Not a valid email address.',
test: function (obj) {//确保有内容的输入并符合email地址的格式
return !obj.value || /^[a-z0-9_+.-]+\@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/i.test(obj.value);
}
},
//确保字段内容是电话号码并将其自动格式化
phone: {
msg: 'Not a valid phone number',
test: function (obj) {
var m = /(\d{3}).*(\d{3}).*(\d{4})/.exec(obj.value);
if (m) {
obj.value = "(" + m[1] + ")" + m[2] + "-" + m[3];
return !obj.value || m;
}
}
},
//确保字段内容符合MM/DD/YYYY的时间格式
date: {
msg: 'Not a valid date.',
test: function (obj) {
return !obj.value || /^\d{2}\/d{2}\/d{2,4}$/.test(obj.value);
}
},
url: {
msg: 'Not a valid URL.',
test: function (obj) {
return !obj.value || obj.value == 'http:://' ||
/^https?:\/\/([a-z0-9-]+\.)+[a-z0-9]{2,4}.*$/.test(obj.value);
}
}
};
//隐藏当前正在显示的任何错误信息
function hideErrors(elem) {
var next = elem.nextSibling;//获取当前字段的下一个元素
if (next && next.nodeName == 'UL' && next.className == 'errors') {//如果下一个元素是ul并有class为errors
elem.parentNode.removeChild(next);//删掉它
}
}
//显示表单内特定字段的错误信息
function showErrors(elem, errors) {
var next = elem.nextSibling;//获取当前字段的下一个元素
if (next && (next.nodeName != 'UL' || next.className != 'errors')) {
next = document.createElement('ul');
next.className = 'errors';
elem.parentNode.insertBefore(next, elem.nextSibling);
}
//有一个包含错误的容器引用,我们可以遍历所有的错误信息
for (var i = 0; i < errors.length; i++) {
var li = document.createElement('li');//为每一个错误信息创建新的li包裹器
li.innerHTML = errors[i];
next.appendChild(li);//并插入到dom中
}
}
//验证表单所有字段的函数
//form参数应是一个表单元素的引用
//load参数应该是一个布尔值 用以判别验证函数在页面加载时执行还是动态执行
function validateForm(form, load) {
var valid = true;
for (var i = 0; i < form.elements.length; i++) {//遍历表单的所有字段的一个数组
hideErrors(form.elements[i]);//先将所有错误信息隐藏
if (!validateField(form.elements[i], load)) {
valid = false;
}
}
return valid;//如果字段是不正确的内容,则返回false,反之则返回true;
}
//验证单个字段的内容
function validateField(elem, load) {
var errors = [];
for (var name in errMsg) {
var re = new RegExp("(^|\\s)" + name + "(\\s|$)");
if (re.test(elem.className) && !errMsg[name].test(elem, load)) {//如果没有通过验证,把错误信息增加到列表中
errors.push(errMsg[name].msg);
}
}
if (errors.length) {//如果存在错误信息,则显示出来
showErrors(elem, errors);
}
return errors.length > 0;
}
function getInputsByName(name) {
var result = [];//匹配的input元素的数组
result.numChecked = 0;//追踪被选中元素的数量
var input = document.getElementsByTagName('input');
for (var i = 0; i < input.length; i++) {
if (input[i].name == name) {//找出所有指定name的字段
result.push(input[i]);//保存结果
if (input[i].checked) {//记录被选中字段的数量
result.numChecked++;
}
}
}
return result;//返回匹配的字段集合
}
window.onload = function () {
var form = document.getElementsByTagName('form')[0];
form.onsubmit = function () {
validateForm(form, 'submit');
return false;
}
}
javascript表单验证的更多相关文章
- JavaScript表单验证年龄
JavaScript表单验证年龄,判断一个输入量是否符合年龄,通过正则表达式实现. //检查年龄 function isAge(str){ var mydate=new Date; var now=m ...
- 前端工具 - 15个最佳的 JavaScript 表单验证库
客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...
- JavaScript表单验证和正则表达式
JavaScript表单验证 分为四类: 1.非空验证 常用于用户名等 2.相等验证 常用于验证两次输入的密码 3.范围验证 常用于年龄等 4.正则验证 用于手机号,邮箱号等 以下是实例: <! ...
- 15个最佳的 JavaScript 表单验证库
客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...
- JavaScript 表单验证入门
JavaScript 表单验证 JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证. 被 JavaScript 验证的这些典型的表单数据有: 用户是否已填写表单 ...
- JavaScript 表单验证 案例
JavaScript 表单验证 案例 版权声明:未经授权,严禁转载! 编写 HTML 文件,搭建主体界面 <html> <head> <meta charset=&q ...
- 10个强大的Javascript表单验证插件推荐
创建一个JavaScript表单验证插件,可以说是一个繁琐的过程,涉及到初期设计.开发与测试等等环节.实际上一个优秀的程序员不仅是技术高手,也应该是善假于外物的.本文介绍了10个不错的JavaScri ...
- JavaScript 表单验证正则表达式大全
JavaScript 表单验证正则表达式大全[转载] 匹配中文字符的正则表达式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[ ...
- JavaScript表单验证实例
1. 长度限制<script>function test(){if(document.a.b.value.length>50){alert("不能超过50个字符!" ...
随机推荐
- 利用PowerShell+Jenkins,实现项目的自动化部署
当项目越来越庞大,部署环境越来越多以后,就会越来越依赖于自动化.比如本人公司的项目,目前有6个web和4个windows service,同时本地有两套环境:开发自测试环境和QA测试环境.每次版本发布 ...
- jQuery学习笔记(二):this相关问题及选择器
上一节的遗留问题,关于this的相关问题,先来解决一下. this的相关问题 this指代的是什么 这个应该是比较好理解的,this就是指代当前操作的DOM对象. 在jQuery中,this可以用于单 ...
- 让计算机崩溃的python代码,求共同分析
在现在的异常机制处理的比较完善的编码系统里面,让计算机完全崩溃无法操作的代码还是不多的.今天就无意运行到这段python代码,运行完,计算机直接崩溃,任务管理器都无法调用,任何键都用不了,只能强行电源 ...
- 一起来学node.js吧 node school简介
node.js这几年火爆的简直丧心病狂,去lagou.com查查node.js的职位,那叫一个多. 要说火爆到什么程度,竟然有一个网站专门去教大家学习node.js, Node School. 进去逛 ...
- [转]run for a girl
上了四个星期决不情愿的自习,终于找到了她上自习的规律, 每个星期五肯定在主教楼525第三排中间,其实第一眼看见她已经喜欢她了,在她周围坐了十天之后更觉得她是我喜欢的那种女孩, (不是每天都能见到她), ...
- Mybatis——oracle 的模糊查询 和 日期处理
第一种 1 <if test="AGTNAM !=null and AGTNAM !=''"> <![CDATA[and AGTNAM like concat(c ...
- Linux_Shell_输出重定向
创建两个文件:touch 1 touch2 命令 > 文件 以覆盖的方式输出正确信息到文件或设备ls > 1 命令 >> 文件 以追加的方式输出正确信息到文件或设备l ...
- DOS常用命令收集(长期更新)
命令列表 命令 说明 ASSOC 显示或修改文件扩展名关联. ATTRIB 显示或更改文件属性. BREAK 设置或清除扩展式 CTRL+C 检查. BCDEDIT 设置启动数据库中的属性以控制启动加 ...
- java的debug和release编译方式
以前没有注意过,其实Java编译成.class 有两种方式 使用javac,默认使用的release方式,而我们经常使用的MyEclipse工具,用的是debug模式. 区别暂时了解如下: relea ...
- js-d3画图插件
d3.js下载 官方网站:http://d3js.org/ github:https://github. com/mbostock/d3/tags forks最新:https://github.com ...