您的浏览器过于古老 & 陈旧。为了更好的访问体验, 请 升级你的浏览器
Ready 发布于2016年06月02日 01:56

原创 jQuery Validator pre 输入预处理器

2075 次浏览 读完需要≈ 8 分钟

内容目录

jQuery Validator的输入预处理器(pre)用于在执行校验前,对输入内容进行对应的预处理。

在jQuery Validator中,除非特别声明,所有的校验器都不会对原始输入进行额外的去空格、大小写转换等处理,而是直接对原始输入进行校验。例如:非空校验器(required)只会将空字符串""视为空,而不会将包含空格的字符串" "视为空。

不过,在表单校验时,我们又确实存在将空格字符串等同于空字符串来校验的需要。此时,我们可以使用输入预处理器来对输入内容进行相应的预处理,然后对处理后的内容进行校验。

语法

jQuery Validator 1.0 新增

// 在校验规则对象中指定该属性
pre: expression

// 例如:去除两侧空白字符、转小写
pre: "trim,lower"

参数

参数 描述
expression String类型将一到多个预处理器名称之间以英文逗号","隔开的表达式字符串。

expression中的预处理器名称即是对应的输入预处理器的函数名称。jQuery Validator将按照表达式中指定的预处理器顺序,依次对输入进行预处理。下一个预处理器将会在上一个预处理器处理结果的基础上,继续进行处理。之后,将最终的处理结果作为输入,交由校验器进行校验。

内置预处理器

目前jQuery Validator内置了以下输入预处理器:

  • trim:去除输入两侧的空白字符。

  • trimAll:去除输入中的所有(包括中间的)空白字符。

  • lower:将输入全部转为小写格式。

  • upper:将输入全部转为大写格式。

  • flush:该预处理器不会对输入进行任何处理,它只是将上一个预处理器的处理结果,同步更新到该表单元素中,以便于用处理后的输入值进行表单提交或其他操作。如果当前输入不是来自表单元素,则该预处理器直接返回之前的处理结果,不会进行更新操作。

自定义预处理器

如果内置的预处理器无法满足你的要求,你还可以自定义预处理器。

在jQuery Validator中,所有的预处理器函数均存储于V.fn.pre对象中。因此,你可以如下定义一个新的预处理器,来实现将输入的首字符转为大写:

// 将输入字符串的首字符转为大写
V.fn.pre.ucfirst = function(value, context){
	// value 经过之前的预处理器处理后的表单输入值
	// context 本次校验的上下文对象
	if(value.length > 0){
		return value.charAt(0).toUpperCase() + value.substr(1);
	}
	return value;
};

接着,我们就可以在定义校验规则时,通过函数名称来指定该预处理器进行输入预处理:

$("form").v("submit", {
	"#input": {
		pre: "trim,ucfirst,flush" // 去除输入值两侧的空格,将首字符转为大写,并更新到表单元素中
		// 其他校验定义		
	}
});

注意事项:
1、出于严格规范性和性能考虑,expression中暂时不能包含任何空白字符。
例如"trim, lower"是无效的。
2、自定义的预处理器函数必须返回处理后的值,jQuery Validator会将该返回结果用于后续的预处理和校验工作。

示例&说明

以如下HTML表单为例:

<form action="https://codeplayer.vip/">
	<div>
		<label>用户名</label>:
		<input id="username" name="username" type="text" >
	</div>
	<div>
		<label>身份证号码</label>:
		<input id="idcard" name="idcard" type="text" >
	</div>
	<input type="submit" value="提交" />
</form>

我们可以使用pre输入预处理器来去除"用户名"输入中的所有空白字符、全部转为小写;由于身份证号码可能包含"X",为了避免用户输入小写"x",因此我们可以先将其全部转为大写:运行代码

// 在表单提交时执行校验
$("form").v("submit", {
	"#username": {
		pre: "trimAll,lower,flush",
		// 预处理器lower已将输入转为小写,因此text校验器无需考虑字母的大小写问题
		text: /^[a-z][a-z0-9_]{5,15}$/,
		message: {
			text: "{label}必须是英文字母、数字和下划线组成的6~16位字符,并且必须以字母开头!"
		}
	},
	"#idcard": {
		pre:"upper,flush",
		format: "idcard/18:[18,]"
	}
});
  • CodePlayer技术交流群1
  • CodePlayer技术交流群2

0 条评论

撰写评论

打开导航菜单