内容目录
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,]"
}
});
0 条评论
撰写评论