`
yipsilon
  • 浏览: 242237 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

表单验证器的使用与扩展

阅读更多
表单字段验证这可是常见应用开发框架中比较重要的一块儿,至少在我看来是这样的。因此,在设计CMSPAD中的表单验证器过程中,我们研究了很多已存在的PHP框架,提炼他们比较有优势的地方,加上本身的项目经验,开发出了具有极好易用性和极大扩展性的产品:CMSPAD Validator(以下称CV)。

在设计CV过程中,我们考虑到了它是由两种角色使用的:前台美工和后台程序员。

1. 美工角色

假设大部分美工不懂程序开发(包括JavaScript),怎么才能让他们很好的使用CV呢?下面让我们看看下列的用例代码:
<form bind="SimplePortlet.helloWorld">
<input type="text" name="email" bind="email:无效的Email地址;"/>
<input type="text" name="chineseName" bind="chinese:请输入中文字符"/>
<button type="submit">提交</button>
</form>

这是CV的最简化用法,主要方便美工进行简单的客户端输入字段验证。bind属性中主要有两部分组成:验证器名称和出现错误对话框时弹出的内容文字,他们之间使用冒号(:)分隔,其中内容文字是可选的,如果没有,它当然就不弹出文字了。下面看看比较复杂点儿的用法:
<form bind="SimplePortlet.helloWorld">
<input type="text" name="username" bind="length(3,20):请输入长度在3至20字符之间的用户名称"/>
<input type="text" name="idcard" bind="idcard:身份证号码不正确; SimplePortlet.idcard"/>
<button type="submit">提交</button>
</form>

这段代码中,检测用户帐号字段使用了两个参数,来判断帐号长度是否在3至20个字符之间,如果没有则弹出文字;而检测身份证号码字段使用了两个验证器:第一个为客户端验证,检查身份证号码规则是否正确,第二个是将信息提交到名字为“SimplePortlet”的Portlet中的checkIdcard方法中,远程验证身份证号码是否正确。两个验证器之间使用分号(;)分隔,当然,每个字段可以有多个验证器,他们顺序执行。例如:
<input type="text" name="username" bind="!empty:不允许为空;length(3,20):长度在3至20字符之间;!equals('Administrator'):不能是Administrator"/>

这样验证器会自动判断该字段是否为非空,如果不是,则弹出对话框;如果是,则检查长度是否在3-20字符之间,如果不是,则弹出对话框;如果是,则检查所输入的是否是“Administraotr”,如果是,则弹出对话框,否则验证通过。

这里有一个特殊的字符“!”,用来表示“非”判断,例如“!empty”就是非空,“!equals”就是不等于。

至此,美工的活儿就完事儿了,不是很难吧。

2.程序员角色

在CV架构中,程序员主要是做以下几件事情:
  1. 开发Portlet端的字段验证方法[*]开发验证器实现

2.1 开发Portlet端的字段验证方法

如果某些字段需要在服务器端进行验证,或者在表单提交时进行服务器端自动验证,那程序员需要开发Portlet端的字段验证方法,样例代码如下:
import('Validator');
class SimplePortlet{
  public function checkIdcard(&$response, $value, $context = false){
    if(Validator::validate('empty', $value, $context)){
      $response->alert('请输入身份证号码');
      return false;
    }else if(!Validator::validate('idcard', $value, $context)){
      $response->alert('无效身份证号码');
      return false;
    }
  }
}

所有的Portlet端字段验证器名称都是以"check"开头,后面跟验证器名称。其参数分别为:控制器的回复对象、待验证的值、验证器上下文(在提交验证时,为$_POST数组;而在远程验证时,为NULL)。

    Portlet端验证器的两种验证方式
  • 远端验证:即在表单字段的bind属性中指定验证器。[*]提交验证:当表单提交到服务器上时,CV会自动根据字段名称与验证器名称相匹配,如果该验证器存在,则进行验证。如果验证器不是返回false,则继续其他字段验证,否则,暂停处理。待到所有验证都通过时,才调用formXXXX方法来进行表单处理。

2.2 验证器实现的开发:

一个验证器实现,类名称必须为 cmspad_validator_<当前文件名>,必须有下面两个方法:
  • validate($value,$context = null): 这是进行服务器端验证的方法。[*]getJavascript($v): 这是获取进行客户端验证所需的JavaScript脚本,是静态方法。
下面看看一个简单的验证器实现:
class cmspad_validator_chinese{
  public function validate($value, $context = null){
    return preg_match('/^[\u0391-\uFFE5]+$/', $value);
  }
  public static function getJavascript($value){
    return "return /^[\u0391-\uFFE5]+$/.test($value);";
  }
}

该代码保存在 inc/validators/chinese.php 文件中。

当在服务器端调用时,使用如下代码:
Validator::validate('chinese', $value, $context);

上面的Portlet字段验证代码中已经有使用样例了,这里就再说明了。

至此,CMSPAD验证器框架的大部分功能已经介绍完毕,学起来还算简单吧。
分享到:
评论

相关推荐

    表单验证控件 简单

    使用简单,功能强大的表单验证插件。 1、验证插件支持正则表达式验证,函数验证,ajax异步验证,支持对比验证,并支持对表单的自定义属性或指定属性进行验证,应该足矣满足常用软件及网站开发需求。(可根据自己需求...

    自定义可扩展的表单验证方法 - 带实例

    现包含用户名、密码、密码一致性、电话、身份证、简单的空值验证... 可以自己很轻松地添加正则验证和自定义验证函数,调用方法简单方便 现在分享出来给大家参考

    一款简洁、实用且漂亮的Javascript表单验证效果,实现Ajax的功能,验证项目包括Email验证、日期验证、字符长度验证、常规验证等,程序基本思路:通过扩展对象来实现,将String扩展 将默认的表单元素扩展 定义两个自定义对象。

    一款简洁、实用且漂亮的Javascript表单验证效果,实现Ajax的功能,验证项目包括Email验证、日期验证、字符长度验证、常规验证等,程序基本思路:通过扩展对象来实现,将String扩展 将默认的表单元素扩展 定义两个...

    from 表单验证 js框架类库

    jQuery formValidator表单验证插件,它是基于jQuery类库,实现了js脚本于页面html代码的分离。你可以划分多个校验组,每个组的校验都是互不影响。对一个表单对象,你只需要写一行代码就可以轻松实现无数种(理论上)...

    通用JS表单验证

    表单中任意域加上emptyInfo属性将对此域是否为空进行验证(可以和最大长度验证\一般验证方式同时使用)。 无此属性视为此域允许空值。  如:字段不能为空!"&gt; 3、最大长度验证(可以和空值验证、一般验证方式同时...

    可扩展表单验证bootstrap-validate

    可扩展表单验证bootstrap-validate.js

    android表单验证组件

    超级容易扩展的android表单验证的小框架.比如,验证登陆模块的用户名和密码是否输入以及输入格式是否正确。验证内容自定义。 包含例子demo和使用说明doc

    使layui.js form 可主动验证表单是否通过

    使layui.js form 可主动验证表单是否通过。扩展layui下的form.js 。文章链接 https://blog.csdn.net/qq_17837497/article/details/107505486

    js验证表单 js验证表单

    js表单验证控制代码大全 /* 目录: 1:js 字符串长度限制、判断字符长度 、js限制输入、限制不能输入、textarea 长度限制 2.:js判断汉字、判断是否汉字 、只能输入汉字 3:js判断是否输入英文、只能输入英文 4:js只能...

    利用JS文件来优化网站表单验证和提交代码

    利用JS文件来优化网站表单验证和提交代码:通过Js文件来优化网站表单验证和提交代码,从而提高了代码的可重用性、简洁性、可读性和扩展性,提高了网站的开发效率。

    表单验证 Validator v4.0

    表单的验证一直是Web开发头痛的问题,表单验证类 Validator就是为解决这个问题而写的,旨在使设计者从纷繁复杂的表单验证中解放出来,把精力集中于UI设计与业务逻辑上。 Validator早期版本是基于JavaScript技术的伪...

    表单验证的插件

    利用jQuery和Bootstrap编写的表单插件,可扩展

    dreamweaver笨阿猪高级表单验证插件

    DREAMWEAVER扩展插件,傻瓜式操作验证表单。很实用的。

    Pisx通用表单验证框架2.0

    这是目前国内开发的所有JS表单验证框架中最好的一个。理由如下:1、简单,只有一个JS文件,不需要其它相关JS支持。2集成AJAX验证支持。3、验证类型全面。4、极易扩展。 主要功能有: PISX通用表单验证具有以下一些...

    jQuery 表单验证插件

    jQuery formValidator表单验证插件,它是基于jQuery类库,实现了js脚本于页面html代码的分离。你可以划分多个校验组,每个组的校验都是互不影响。对一个表单对象,你只需要写一行代码就可以轻松实现无数种(理论上)...

    表单验证插件国产插件

    jQuery formValidator表单验证插件,它是基于jQuery类库,实现了js脚本于页面html代码的分离。你可以划分多个校验组,每个组的校验都是互不影响。对一个表单对象,你只需要写一行代码就可以轻松实现无数种(理论上)...

    jquery表单验证插件

    jquery表单验证插件制作多张提交表单验证,扩展容易,可提交ajax验证.

    简单且强大的js表单验证框架

    我们中国人写的验证框架,比struts验证框架简单,而且功能强大,容易扩展

    jQuery formValidator表单验证插件4.1.3提供下载

    jQuery formValidator表单验证插件,它是基于jQuery类库,实现了js脚本于页面html代码的分离。你可以划分多个校验组,每个组的校验都是互不影响。对一个表单对象,你只需要写一行代码就可以轻松实现无数种(理论上)...

    表单验证 Validator v4.0 案例 源码 帮助文档

    表单的验证一直是Web开发头痛的问题,表单验证类 Validator就是为解决这个问题而写的,旨在使设计者从纷繁复杂的表单验证中解放出来,把精力集中于UI设计与业务逻辑上。 Validator早期版本是基于JavaScript技术的伪...

Global site tag (gtag.js) - Google Analytics