让我们来看一个简单的场景,要求用户输入加拿大邮政编码。以下邮政编码均有效且等效:
我希望用户输入其中的任何一个,但是一旦该字段被保留以将值标准化为第一个表单。我的postalCode
验证方法确实允许输入其中任何一个,但是,我想知道将值标准化的正确方法是什么。
也许jQuery验证插件中已经存在这样的工具,我只是没有看到它。
修改
给定一个函数normalizeInput
我想知道如何将其插入。也许jQuery验证插件中有一个钩子专门用于此。如果没有,那么如何在成功验证后留下字段后调用它。
答案 0 :(得分:1)
尝试以下方法:
function normalizePostalCode(s) {
return s.replace(/(.{3}) ?(.{3})/, '$1 $2').toUpperCase();
}
var s = "h0h0h0";
s = normalizePostalCode(s); // H0H 0H0
它将删除空格(\s
),并将每个字母转换为大写,使第一个形式不变,并将第二个和第三个形式转换为第一个。
编辑:我认为jQuery Validation Plugin不提供某种规范化回调。但是,您可以使用.blur()
或.focusout()
事件并检查字段是否为valid()
,如果是,则将其标准化:
$("#txtPostalCode").blur(function () {
$this = $(this);
$this.validate();
if ($this.valid()) {
$this.val(normalizePostalCode($this.val()));
}
});
<强> DEMO 强>
答案 1 :(得分:1)
根据Jquery Validate网站,您可以为任何给定字段包含一种方法,以便在验证之前规范化值: https://jqueryvalidation.org/normalizer/
```
.as-console-wrapper { max-height: 100% !important; top: 0; }
```
但这只是逐个字段的基础上看来的。
答案 2 :(得分:0)
我添加了自己的空白方法,
$(document).ready(function($) {
jQuery.validator.addMethod("whitespace", function(value, element) {
return $.trim( value );
}, 'whitespace is not allowed');
});
// in rules
rules: {
street: {
whitespace: true,
email: true
},
}