如何使用jQuery验证插件规范化有效值?

时间:2012-09-03 18:34:44

标签: jquery validation

让我们来看一个简单的场景,要求用户输入加拿大邮政编码。以下邮政编码均有效且等效:

  • H0H 0H0
  • h0h 0h0
  • h0h0h0

我希望用户输入其中的任何一个,但是一旦该字段被保留以将值标准化为第一个表单。我的postalCode验证方法确实允许输入其中任何一个,但是,我想知道将值标准化的正确方法是什么。

也许jQuery验证插件中已经存在这样的工具,我只是没有看到它。

修改

给定一个函数normalizeInput我想知道如何将其插入。也许jQuery验证插件中有一个钩子专门用于此。如果没有,那么如何在成功验证后留下字段后调用它。

3 个答案:

答案 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
      },
    }