0

ユーザーがカナダの郵便番号を入力するように要求される簡単なシナリオを調べてみましょう。次の郵便番号はすべて有効で同等です。

  • H0H 0H0
  • h0h 0h0
  • h0h0h0

ユーザーにそれらのいずれかを入力してもらいたいのですが、フィールドが残ったら、値を最初の形式に正規化します。私のpostalCode検証方法では実際にそれらのいずれかを入力できますが、値を正規化する正しい方法は何でしょうか。

たぶん、jQuery検証プラグインにはすでにそのような機能がありますが、私にはわかりません。

編集

関数が与えられた場合、normalizeInputどうすればプラグインできるのでしょうか。jQuery検証プラグインにはそのためのフックがあるかもしれません。そうでない場合は、検証が成功したときにフィールドが残された後に呼び出されるようにする方法。

4

3 に答える 3

2

Jquery ValidateのWebサイトによると、検証される前に値を正規化するために、任意のフィールドに含めることができるメソッドがあります: 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)を削除し、各文字を大文字に変換して、最初の形式をそのままにして、2番目と3番目の形式を最初の形式に変換します。

編集:jQuery検証プラグインが何らかの正規化コールバックを提供するとは思わない。ただし、.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 に答える