表单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表单验证的更多相关文章

  1. JavaScript表单验证年龄

    JavaScript表单验证年龄,判断一个输入量是否符合年龄,通过正则表达式实现. //检查年龄 function isAge(str){ var mydate=new Date; var now=m ...

  2. 前端工具 - 15个最佳的 JavaScript 表单验证库

    客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...

  3. JavaScript表单验证和正则表达式

    JavaScript表单验证 分为四类: 1.非空验证 常用于用户名等 2.相等验证 常用于验证两次输入的密码 3.范围验证 常用于年龄等 4.正则验证 用于手机号,邮箱号等 以下是实例: <! ...

  4. 15个最佳的 JavaScript 表单验证库

    客户端验证在任何项目都是不够的,因为 JavaScript 可以直接忽略,人们可以提交请求到服务器. 然而这并不意味着客户端验证都没必要了,很多时候我们需要在用户提交到服务器之前给予提示.JavaSc ...

  5. JavaScript 表单验证入门

    JavaScript 表单验证 JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证. 被 JavaScript 验证的这些典型的表单数据有: 用户是否已填写表单 ...

  6. JavaScript 表单验证 案例

    JavaScript 表单验证 案例 版权声明:未经授权,严禁转载!   编写 HTML 文件,搭建主体界面 <html> <head> <meta charset=&q ...

  7. 10个强大的Javascript表单验证插件推荐

    创建一个JavaScript表单验证插件,可以说是一个繁琐的过程,涉及到初期设计.开发与测试等等环节.实际上一个优秀的程序员不仅是技术高手,也应该是善假于外物的.本文介绍了10个不错的JavaScri ...

  8. JavaScript 表单验证正则表达式大全

    JavaScript 表单验证正则表达式大全[转载] 匹配中文字符的正则表达式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[ ...

  9. JavaScript表单验证实例

    1. 长度限制<script>function test(){if(document.a.b.value.length>50){alert("不能超过50个字符!" ...

随机推荐

  1. mac 设置阿里企业邮箱

    接收邮件服务器:pop3.mxhichina.com或pop3.您的域名,端口:110 发送邮件服务器:smtp.mxhichina.com或smtp.您的域名,端口:25 IMAP协议设置 接收邮件 ...

  2. 【CSS】 background

    background: #22b4ff //背景色 url("http://images.cnblogs.com/cnblogs_com/oiliu/529256/o_titleIMG.jp ...

  3. android 随记 ContentValues

    ContentValues 和HashTable类似都是一种存储的机制 但是两者最大的区别就在于,contenvalues只能存储基本类型的数据,像string,int之类的,不能存储对象这种东西,而 ...

  4. 个人阅读作业——M1/M2总结

    ~ http://www.cnblogs.com/wx1306/p/4831950.html 在这篇博客中,我提出来一些关于软件工程的问题,但随着这一个学期的即将结束,以及我对软件开发的了解的深入,我 ...

  5. gettter,delatter,settter

    class Foo: x = 1 def __init__(self,y): self.y=y def __getattr__(self, item): print('自行--getatter') d ...

  6. Android Intent应用

    1. 显示Intent // 直接设置Content和到下一个的Actvity的名字 Intent i = new Intent(MainActivity.this, AnotherAty.class ...

  7. RAID的简单介绍

    该文章全部复制转载于:http://blog.jobbole.com/83808/,只为做笔记供自己查看 简介 RAID是一个我们经常能见到的名词.但却因为很少能在实际环境中体验,所以很难对其原理 能 ...

  8. 9.28 Java基本数据类型作业

    要求:声明各数据类型变量或常量,赋值并进行输出. 以下为代码: public class SJLX {//公共类 public static void main(String[] args) { // ...

  9. MySql_SQLyog快捷键

    1. SQL格式化 F12 格式化当前行所在的SQL Ctrl+F12    格式化选中的SQL Shift+F12   格式化所有SQL 2. 窗口操作 Ctrl+T 打开一个新的查询窗口 Alt+ ...

  10. 使用事件捕获实时捕获img是否加载完毕, 实现iframe内容高度自动适应

    如何判断在html中图片加载完毕呢? 给img图片加onload事件呗. 如何判断一个界面中所有的图片加载完毕呢? 给所有的图片加上onload事件呗. 如果有1000张图片那要怎么绑定事件呢? 我们 ...