使用jQuery 1.9.2时,非必填文本框最小长度验证不识别空格的原因?
关于jQuery 1.9.2表单验证非必填字段最小长度的问题
Hey there, let's break down your question clearly:
这个现象主要和你配套使用的jQuery Validation插件(注意原生jQuery本身不带表单验证功能)的默认行为有关,而非jQuery 1.9.2本身的问题,不过版本适配确实影响了这个逻辑,下面具体说:
核心原因:适配jQuery 1.9.x的早期jQuery Validation插件版本里,默认会对所有输入值做自动trim处理——也就是去掉字符串首尾的空格。对于非必填字段来说,如果用户只输入空格,trim之后就变成了空字符串,插件会判定这个字段没有“有效输入”,所以不会触发最小长度验证;只有当trim后的值不为空时,才会去检查长度是否符合要求。这是当时插件的默认设计逻辑,不是bug,因为通常纯空格的输入不会被视为有意义的内容。
如果想验证是不是版本因素:你要是换成适配高版本jQuery的Validation插件,默认行为其实也类似,但新版本提供了更灵活的配置项。不过回到1.9.2的场景,这就是当时插件的既定规则。
如果需要强制验证包括空格在内的所有字符长度,怎么调整?
你可以通过自定义验证规则来覆盖默认行为,举两个实用的方法:- 利用depends参数触发验证:
在字段的验证规则里,通过depends指定只要输入内容(哪怕全是空格)就触发minlength检查:$(yourForm).validate({ rules: { targetField: { required: false, minlength: { param: 3, depends: function(element) { // 只要输入框有内容(长度>0)就验证 return $(element).val().length > 0; } } } } }); - 自定义不做trim的验证方法:
直接新增一个忽略trim的minlength规则,这样就能精确控制验证逻辑:// 添加自定义验证方法 $.validator.addMethod('minlengthWithSpaces', function(value, element, param) { // optional(element)处理非必填字段的空值情况,否则会强制要求输入 return this.optional(element) || value.length >= param; }, "最少需要输入{0}个字符(包含空格)"); // 在表单验证中使用这个规则 $(yourForm).validate({ rules: { targetField: { required: false, minlengthWithSpaces: 3 } } });
- 利用depends参数触发验证:
总的来说,这不是jQuery 1.9.2本身的问题,而是配套Validation插件的默认行为导致的。如果需要验证包含空格的长度,通过上面的自定义规则就能解决。
内容的提问来源于stack exchange,提问作者Octopus
相关产品推荐
相关产品推荐

