0

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

  • H0H 0H0
  • h0h 0h0
  • h0h0h0

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

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

编辑

给定一个函数normalizeInput,我想知道如何插入它。也许 jQuery 验证插件中有一个专门用于此的钩子。如果没有,如何做到这一点,以便在成功验证后离开该字段后调用它。

4

3 回答 3

2

根据 Jquery Validate 网站,您可以为任何给定字段包含一种方法,以在验证值之前对其进行规范化: https ://jqueryvalidation.org/normalizer/

```

$( "#myform" ).validate( {
  rules: {
    field: {
      required: true,
      normalizer: function( value ) {
        // Trim the value of the `field` element before
        // validating. this trims only the value passed
        // to the attached validators, not the value of
        // the element itself.
        return $.trim( value );
      }
    }
  }
} );

```

但从外观上看,这只是逐个领域的基础。

于 2017-02-10T19:24:43.703 回答
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()or.focusout()事件并检查该字段是否为valid(),如果是,则对其进行规范化:

$("#txtPostalCode").blur(function () {
    $this = $(this);
    $this.validate();
    if ($this.valid()) {
      $this.val(normalizePostalCode($this.val()));   
    }
});

演示

于 2012-09-03T18:40:43.093 回答
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
      },
    }
于 2020-08-03T18:17:11.043 回答