吐个嘈先:最近状态不咋滴,真是什么都不想干,不想上班,做什么都没动力,觉得没意思。不想这样,不想这样,快让这种情绪消失吧,忽忽....

表单验证在项目中用的还是比较多的,公司当前正在做的项目就要用到,故此写了此插件,先给大家看下在项目中应用的效果图吧:

直接上插件实现代码了,围绕代码进行讲解比较容易点:

/*

描述:基于jquery的表单验证插件。

时间:2014-8-3

作者:similar(281542025@qq.com)

*/

(function ($) {

$.fn.checkForm = function (options) {

var root = this; //将当前应用对象存入root

var isok = false; //控制表单提交的开关

var pwd1; //密码存储

var defaults = {

//图片路径

img_error: "img/error.gif",

img_success: "img/success.gif",

//提示信息

tips_success: '', //验证成功时的提示信息,默认为空

tips_required: '不能为空',

tips_email: '邮箱地址格式有误',

tips_num: '请填写数字',

tips_chinese: '请填写中文',

tips_mobile: '手机号码格式有误',

tips_idcard: '身份证号码格式有误',

tips_pwdequal: '两次密码不一致',

//正则

reg_email: /^\w+\@[a-zA-Z0-9]+\.[a-zA-Z]{2,4}$/i,  //验证邮箱

reg_num: /^\d+$/,                                  //验证数字

reg_chinese: /^[\u4E00-\u9FA5]+$/,                 //验证中文

reg_mobile: /^1[3458]{1}[0-9]{9}$/,                //验证手机

reg_idcard: /^\d{14}\d{3}?\w$/                     //验证身份证

};

//不为空则合并参数

if(options)

$.extend(defaults, options);

//获取(文本框,密码框,多行文本框),当失去焦点时,对其进行数据验证

$(":text,:password,textarea", root).each(function () {

$(this).blur(function () {

var _validate = $(this).attr("check"); //获取check属性的值

if (_validate) {

var arr = _validate.split(' '); //用空格将其拆分成数组

for (var i = 0; i < arr.length; i++) {

//逐个进行验证,不通过跳出返回false,通过则继续

if (!check($(this), arr[i], $(this).val()))

return false;

else

continue;

}

}

})

})

//表单提交时执行验证,与上面的方法基本相同,只不过是在表单提交时触发

function _onSubmit() {

isok = true;

$(":text,:password,textarea", root).each(function () {

var _validate = $(this).attr("check");

if (_validate) {

var arr = _validate.split(' ');

for (var i = 0; i < arr.length; i++) {

if (!check($(this), arr[i], $(this).val())) {

isok = false; //验证不通过阻止表单提交,开关false

return; //跳出

}

}

}

});

}

//判断当前对象是否为表单,如果是表单,则提交时要进行验证

if (root.is("form")) {

root.submit(function () {

_onSubmit();

return isok;

})

}

//验证方法

var check = function (obj, _match, _val) {
       //根据验证情况,显示相应提示信息,返回相应的值

switch (_match) {

case 'required':

return _val ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_required, false);

case 'email':

return chk(_val, defaults.reg_email) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_email, false);

case 'num':

return chk(_val, defaults.reg_num) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_num, false);

case 'chinese':

return chk(_val, defaults.reg_chinese) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_chinese, false);

case 'mobile':

return chk(_val, defaults.reg_mobile) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_mobile, false);

case 'idcard':

return chk(_val, defaults.reg_idcard) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_idcard, false);

case 'pwd1':

pwd1 = _val; //实时获取存储pwd1值

return true;

case 'pwd2':

return pwdEqual(_val, pwd1) ? showMsg(obj, defaults.tips_success, true) : showMsg(obj, defaults.tips_pwdequal, false);

default:

return true;

}

}

//判断两次密码是否一致(返回bool值)

var pwdEqual = function(val1, val2) {

return val1 == val2 ? true : false;

}

//正则匹配(返回bool值)

var chk = function (str, reg) {

return reg.test(str);

}

//显示信息

var showMsg = function (obj, msg, mark) {

$(obj).next("#errormsg").remove();//先清除

var _html = "<span id='errormsg' style='font-size:13px;color:gray;background:url(" + defaults.img_error + ") no-repeat 0 -1px;padding-left:20px;margin-left:5px;'>" + msg + "</span>";

if (mark)

_html = "<span id='errormsg' style='font-size:13px;color:gray;background:url(" + defaults.img_success + ") no-repeat 0 -1px;padding-left:20px;margin-left:5px;'>" + msg + "</span>";

$(obj).after(_html);//再添加

return mark;

}

}

})(jQuery);

注释已经讲解了大部分内容了,多数人一看就懂了。

实现原理:

  首先定义好正则,和相应的提示信息,

  加上自定义check属性,

  然后获取check属性的值,多个值用空格分开。利用split()将其拆分为数组,在逐个调用check()方法进行验证。

  之后通过验证的返回值来确定显示的信息。

这里有两个验证是比较特别的,就是:

1.验证是否为空 (required)

2.两次密码是否一致 (pwd2)

这两个都没有用到正则,因为根本就用不上。 两次密码是否一致 ,单独写了个方法 pwdEqual();

插件里的验证正则我只写了几个 ,如果不够用可以自行扩展添加。

扩展只需3步:

1.添加正则,

2.添加相应提示信息,

3.check()方法中添加相应 case 处理

插件使用说明:

  1.给表单下要进行验证的文本框,密码框 ,多行文本框加上自定义check属性

  2.多个格式验证用空格间隔,如(同时验证必填和邮箱): check="required email"

  3.如果要验证两次密码是否一致,则pwd1和pwd2一起使用,如下图:

   pwd1存储第一次输入的值,pwd2存储第二次输入的值,如果你只用pwd1还好。

   但如果只用了pwd2,则验证是始终无法通过的。

下面给出DEMO示例代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>表单验证插件</title>

</head>

<body>

<form id="myform" method="post" action="success.html">

<ul>

<li>

邮箱:<input type="text" name="email" check="required email" />

</li>

<li>

密码:<input type="password" check="required pwd1" />

</li>

<li>

确认密码:<input type="password" check="required pwd2" />

</li>

<li>

手机:<input type="text" name="num" check="required mobile" />

</li>

<li>

数字:<input type="text" name="num" check="required num" />

</li>

<li>

地址:<textarea cols="5" rows="5" check="required"></textarea>

</li>

<li>

不加check验证的文本框:<input type="text" name="num" />

</li>

</ul>

<input type="submit" value="提交" />

</form>

<script src="js/jquery-1.4.4.min.js" type="text/javascript"></script>

<script src="js/jquery.similar.checkForm.js" type="text/javascript"></script>

<script type="text/javascript">

$("#myform").checkForm();

</script>

</body>

</html>

示例效果图片:

示例代码,成功提交是会跳转到success.html页面的,因此你要自己创建个success.html,里面可以什么都不写。

但是,只要有一个验证不通过,就不会成功跳转。

另外,你或许还需要2张图片:

//图片路径

img_error: "img/error.gif",

img_success: "img/success.gif",

上传在这了,自己右键另存为吧。

语文没学好,语言组织能力,及表达能力实在是欠缺。自己理解了,却无法很好的讲出来,无奈。

大家如果还有什么不明白的可以留言,或者对上面代码有什么建议的也请留言(讨论出最好结果),又或者发现了bug的,麻烦及时告知,谢谢!

自己编写jQuery插件之表单验证的更多相关文章

  1. Jquery插件easyUi表单验证提交

    <form id="myForm" method="post"> <table align="center" style= ...

  2. Jquery.validate.js表单验证插件的使用

    作为一个网站web开发人员,以前居然不知道还有表单验证这样好呀的插件,还在一行行写表单验证,真是后悔没能早点知道他们的存在. 最近公司不忙,自己学习一些东西的时候,发现了validation的一个实例 ...

  3. jQuery常用插件与jQuery使用validation插件实现表单验证实例

    jQuery常用插件 1,jQuery特别容易扩展,开发者可以基于jQuery开发一些扩展动能 2,插件:http://plugins.jquery.com 3,超厉害的插件:validation . ...

  4. jQuery.validate.js表单验证插件

    jQuery.validate.js表单验证插件的使用 效果: 代码: <!DOCTYPE html> <html lang="en"> <head& ...

  5. 基于jQuery的Validate表单验证

    表单验证可以说在前端开发工作中是无处不在的~ 有数据,有登录,有表单, 都需要前端验证~~  而我工作中用到最多的就是基于基于jQuery的Validate表单验证~  就向下面这样~ 因为今天有个朋 ...

  6. 基于Jquery Validate 的表单验证

    基于Jquery Validate 的表单验证 jquery.validate.js是jquery下的一个验证插件,运用此插件我们可以很便捷的对表单元素进行格式验证. 在讲述基于Jquery Vali ...

  7. 异步提交form的时候利用jQuery validate实现表单验证

    异步提交form的时候利用jQuery validate实现表单验证相信很多人都用过jquery validate插件,非常好用,并且可以通过下面的语句来自定义验证规则    // 电话号码验证    ...

  8. jQuery Validation Engine 表单验证,自定义规则验证方法

    jQuery Validation Engine 表单验证说明文档http://code.ciaoca.com/jquery/validation-engine/ js加到jquery.validat ...

  9. jquery.validation.js 表单验证

    jquery.validation.js 表单验证   官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuer ...

随机推荐

  1. B9 Concurrent 重入锁(ReentrantLock)

    [概述] java.util.concurrent.locks.ReentrantLock 实现 java.util.concurrent.locks.Lock 接口,加锁(lock)和 解锁(unl ...

  2. [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)

    linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...

  3. Dining(POJ-3281)【最大流】

    题目链接:https://vjudge.net/problem/POJ-3281 题意:厨师做了F种菜各一份,D种饮料各一份,另有N头奶牛,每只奶牛只吃特定的菜和饮料,问该厨师最多能满足多少头奶牛? ...

  4. go if 判断 完成随机分数的评级

    1 go中 所有的大括号要跟在 当前语句的后面不能换行 例如: if a>0  { func getUser(){ for { 2关于随机分数的生成 种子的设置放到循环中会是重复的数字,这是可以 ...

  5. MongoDB查询操作

    按条件查询 比较操作:$lt,$lte,$gt,$gte,$ne db.user.find({}}); $or :包含多个条件,他们之间为or的关系 ,$nor相当于or取反 db.user.find ...

  6. 模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理、分类及应用

    模型汇总24 - 深度学习中Attention Mechanism详细介绍:原理.分类及应用 lqfarmer 深度学习研究员.欢迎扫描头像二维码,获取更多精彩内容. 946 人赞同了该文章 Atte ...

  7. Asp.net core 学习笔记 2.2 migration to 3.0

    Ef core 3.0 一些要注意的改变 refer : https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/breaki ...

  8. mysql存储emoji表情报错的处理方法【更改编码为utf8mb4】

    utf-8编码可能2个字节.3个字节.4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符.如果直接往采用utf-8编码的数据库中插入表情数据,Java程 ...

  9. [Vue]vue中路由重定向redirect

    1.重定向的地址不需要接收参数 const routes = [ { path: '/', redirect: '/index'}, { path: '/index', component: inde ...

  10. (九)Activitivi5之使用 RuntimeService 设置和获取流程变量

    一.案例 /** * 设置流程变量数据 */ @Test public void setVariableValues(){ RuntimeService runtimeService=processE ...