`
javeejy
  • 浏览: 6300 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

万能的表单验证设计

阅读更多

平时用到的表单验证库,功能是异常的强大,但里面实际用到的却不多,为了几个验证就拖一个库,实在不值,不如自己设计个实用的函数解决这验证问题。
验证问题就是解决是还是不是的问题,是了就得提交,此外,用户体验也是个重点,正确,错误的消息怎么提示,所以,这个函数包括:

1.能对指定的多个字段进行验证
2.能够自定单个字段的验证方法
3.当验证失败时,可定义默认的消息提示方式
4.当验证失败时,可选择是否自动聚焦到元素
5.当验证成功时,可返回字段的提交字符串
6.字段元素既可传入ID也可传入name,name比ID要优先考虑
7.验证字段不依赖form

好了,这些功能够了吧,能应该验证N+1种表单了。
等会实现用到的相关函数,相信都很熟悉:

/**
 * 这个函数利用了JS动态语言特性,看上去很神秘,实际是很形象的,举个例子就明了.
 */
validate: function() {
  var args = CC.$A(arguments),
  form = null;
  //form如果不为空元素,应置于第一个参数中.
  if (!CC.isArray(args[0])) {
    form = CC.$(args[0]);
    args.remove(0);
  }
  //如果存在设置项,应置于最后一个参数中.
  //cfg.queryString = true|false;
  //cfg.callback = function
  //cfg.ignoreNull
  //nofocus:true|false
  var b = CC.isArray(b) ? {}: args.pop(),
  d;
  var queryStr = b.queryString,
  ignoreNull = b.ignoreNull,
  cb = b.callback;
  var result = queryStr ? '': {};
  CC.each(args,
  function(i, v) {
    //如果在fomr中不存在该name元素,就当id来获得
    var obj = v[0].tagName ? v[0] : form ? form[v[0]] : CC.$(v[0]);
    //console.debug('checking field:',v, 'current value:'+obj.value);
    var value = obj.value,
    msg = v[1],
    d = CC.isFunction(v[2]) ? v[3] : v[2];
    //选项
    if (!d || typeof d != 'object') d = b;
 
    //是否忽略空
    if (!d.ignoreNull && (value == '' || value == null)) {
      //如果不存在回调函数,就调用alert来显示错误信息
      if (!d.callback) CC.alert(msg, obj, form);
      //如果存在回调,注意传递的三个参数
      //msg:消息,obj:该结点,form:对应的表单,如果存在的话
      else d.callback(msg, obj, form);
      //出错后是否聚集
      if (!d.nofocus) obj.focus();
      result = false;
      return false;
    }
    //自定义验证方法
    if (CC.isFunction(v[2])) {
      var ret = v[2](value, obj, form);
      var pass = (ret !== false);
      if (CC.isString(ret)) {
        msg = ret;
        pass = false;
      }
 
      if (!pass) {
        if (!d.callback) CC.alert(msg, obj, form);
        //同上
        else d.callback(msg, obj, form);
 
        if (!d.nofocus) obj.focus();
        result = false;
        return false;
      }
    }
    //如果不设置queryString并通过验证,不存在form,就返回一个对象,
    //该对象包含形如{elementName|elementId:value}的数据.
    if (queryStr && !form) {
      result += (result == '') ? 
            ((typeof obj.name == 'undefined' || obj.name == '') ? obj.id: obj.name) +
                '=' + value: '&' + v[0] + '=' + value;
    } else if (!form) {
      result[v[0]] = value;
    }
  });
  //如果设置的queryString:true并通过验证,就返回form的提交字符串.
  if (result !== false && form && queryStr) result = CC.formQuery(form);
  return result;
}

 OK,关键部分已完成, 举个例子说明:

/**
 * validate应用例子
 */
 
//测试邮箱格式
function isMail(strMail) {
  return /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(strMail);
}
 
//密码长度>=6
function checkPassword(v) {
  return v.length >= 6;
}
 
//两次密码要相同
function isTheSame(v, obj, form) {
  return form ? form.password.value == v: CC.$('password').value == v;
}
 
//出错时自定回调
function myCallback(msg, obj, form) {
  alert("出错显示的消息是:" + msg + " - 元素:" + 
          obj.name + ",所在form:" + (form ? form.id: '无'));
}
 
//存在Form的例子
function testForm() {
  var result = CC.validate('testForm', 
     ['username', '请输入用户名。'], 
     ['mail', '邮箱格式不正确。', isMail], 
     ['password', '密码长度大于或等于6。', checkPassword],
     //完整的配置示例
     ['password2', '两次密码不一致。', isTheSame, 
        {nofocus: false,callback: myCallback,ignoreNull: false}
     ], 
     {queryString: true});
 
  if (result !== false) alert("恭喜,通过验证!提交的字符串是:" + result);
 
  return result;
}
//无Form的例子.
function testNoForm() {
  var result = CC.validate( //既然没form了,这里不必存入form id作为第一个参数.
   ['username', '请输入用户名。'], 
   ['mail', '邮箱格式不正确。', isMail], 
   ['password', '密码长度大于或等于6。', checkPassword],
   ['password2', '两次密码不一致。', isTheSame, 
        {nofocus: false, callback: myCallback, ignoreNull: false}
   ], 
  //函数最后一个参数
  { queryString: true});
 
  if (result !== false) alert("恭喜,通过验证!提交的字符串是:" + result);
 
  return result;
}

 

是不是很方便,一看就会用?
只需要验证想要的东西!
以上只是列举一部份功能,更多功能请查看源码.

点击此处 下载本文可运行示例。

 

分享到:
评论

相关推荐

    万能表单验证库

    "万能表单验证库"是一个强大的工具,旨在简化网页中的表单验证过程。这个库兼容各种主流浏览器,包括但不限于Chrome、Firefox、Safari、Edge和Internet Explorer,确保无论用户使用哪种浏览器,都能得到一致的验证...

    万能通用智能JS表单验证

    本主题聚焦于“万能通用智能JS表单验证”,这是一种利用JavaScript实现的高效、灵活的表单验证技术。表单验证是用户交互过程中的关键环节,它能够确保用户输入的数据符合预设的规则,从而减少服务器端的压力,提升...

    万能表单验证

    【万能表单验证】是一种高效且全面的前端数据验证技术,它旨在确保用户在填写网页表单时输入的数据符合预设的规则和格式。在Web开发中,表单验证是必不可少的一环,因为它能够提高用户体验,防止无效或错误的数据...

    PHP_万能表单+7.7.5.zip

    【PHP 万能表单】是一种灵活且功能强大的表单构建工具,专为开发者设计,以便于创建和管理各种类型的在线表单。在本压缩包"PHP_万能表单+7.7.5.zip"中,包含了版本号为7.7.5的智慧表单流程,这通常意味着该软件已经...

    万能Form表单验证

    "万能Form表单验证"是一种高效且灵活的解决方案,它提供了全面的验证功能,包括中文字符、数字以及电话号码等多种数据类型的验证。下面将详细阐述这个主题。 一、表单验证的重要性 表单验证的主要目的是确保用户...

    jQ表单万能验证插件 vf-validate.js

    JQ表单验证插件 使用方法:$.formValidate(options); version:1.6.0 @param {Object} options @param options.area 验证的区域父级元素,默认 body @param options.msg_type 错误提示类型:alert(自定义函数...

    PHP万能表单报名问答系统

    3. **表单验证**:为了确保收集到的数据质量,系统通常包含前端和后端的表单验证机制。前端验证通过JavaScript进行,如检查必填项、格式校验等;后端验证则由PHP处理,防止恶意数据注入和安全风险。 4. **用户交互*...

    万能表单验证插件

    【万能表单验证插件】是一款高效且实用的前端开发工具,专为网页表单设计,旨在提高用户体验和数据准确性。它具有简洁的代码结构,使得开发者能够快速集成到项目中,同时提供了丰富的验证规则,几乎涵盖了日常开发中...

    实现万能表单在前台审核与回复插件 for PHP168 v6.rar

    在本文中,我们将深入探讨如何实现“万能表单在前台审核与回复”的功能,针对PHP168 v6框架。这个插件的目的是让管理员能够在前端界面进行表单内容的审核和回复,以提高效率并提供更便捷的工作流程。 首先,理解...

    报名系统,在线预约系统,万能表单系统

    =================================智能表单设计============================= 一键智能复制字段 字段名称设置 输入框内提示文字设置 可设置管理才能填写的字段 管理字段,可设置用户查询时是否可见 支持10几种必备...

    基于PHP的表单程序源码.zip

    10. **响应式设计**: 当今的Web应用需要适应不同设备的屏幕尺寸,因此表单设计应考虑响应式布局,如使用Bootstrap等框架,使表单在手机、平板和桌面设备上都能良好显示。 综上所述,基于PHP的表单程序源码涉及到...

    工单预约表单plus 3.28.1运营版 亲测

    这款软件的核心在于其万能表单功能,可以灵活适应各种业务场景,满足企业的个性化需求。 首先,版本号3.28.1的更新主要体现在性能优化上。开发者对软件进行了全面的升级,确保了其在实际操作中的流畅性与稳定性。这...

    非常好用的表单时间插件

    3. 验证:插件可自动检查用户输入是否符合预设的规则,例如检查日期是否有效,时间是否在指定范围内。 4. 动态更新:当用户选择日期或时间后,插件会实时更新表单字段,无需用户手动输入。 5. 国际化支持:考虑到...

    PHP万能登陆密码

    其中`$username`和`$password`是从用户提交的表单中获取的数据。攻击者可以通过提交特制的用户名来构造一个始终为真的条件,从而绕过密码验证。 ##### 示例:万能密码绕过GPC魔术引号 - **万能密码**:`' or '1'='...

    jquery万能浮动层提示框插件图片、文字、表单文字提示等提示框

    对于表单元素,提示框可以用来提供验证信息或帮助文本。当用户填写表单时,插件可以实时显示输入是否有效,提升表单填写的准确性。 8. **响应式设计**: 在移动设备流行的今天,一个优秀的提示框插件应具备响应式...

    网站后台万能密码

    “万能密码”是一种利用SQL注入漏洞进行攻击的方式,其核心在于构造出始终为真的SQL条件或利用SQL语法特性绕过身份验证。为了保护网站后台的安全,开发者必须采取一系列措施,包括输入验证、参数化查询、最小权限...

    JSP万能详细登录系统

    6. **表单验证**: 用户输入的验证是登录系统的关键部分,JSP可以通过JavaScript进行前端验证,同时在服务器端使用Java进行二次验证,确保数据的准确性和安全性。 **具体实现** 1. **登录界面**: JSP页面包含登录...

    工单预约表单plus-3.14.3.zip

    总结来说,"工单预约表单plus-3.14.3.zip"文件与一个工单预约系统有关,其中的"wq模块"可能是系统的核心部分,而"万能表单"和"超级表单"则提供了强大的定制能力和交互体验。这个更新可能包含了对原有功能的强化和...

    Laravel 的现代表单构建器_PHP_代码_下载

    Aire 是一个现代的 Laravel 表单构建器(演示),它专注于你...Aire 自动将旧输入绑定到您的表单,以便在发生验证错误时保留值。您还可以使用该bind()方法绑定数据。 更多详情、使用方法,请下载后阅读README.md文件

    万能打模块.net

    【万能打印模块.Net】是一种高效且灵活的打印解决方案,专为办公室网站系统设计,它充分利用了Microsoft的.NET框架的强大功能。此模块旨在简化打印流程,提供高度自定义的打印选项,以满足不同用户和业务场景的需求...

Global site tag (gtag.js) - Google Analytics