2016-08-11 7 views
1

私のスクリプトでは、値をカンマとドット、最大値と最小値で検証する必要があります。 これは私が25.00(ドット)のように価格を置くが、私は25,01(カンマ)検証を入れたときに動作しない場合には、優れた作品)(yii2 number max、min with dotとcomma validation

return [ 
     [['price'], 'required', 'message' => 'Price ...'], 
     [['price'], 'number', 'numberPattern' => '/^[0-9]{1,2}([\.,][0-9]{1,2})*$/', 
      'message' => 'Price ...', 'max' => 25, min => '0'], 
    ]; 

私のルールです。どのように動作させるか考えていますか?

答えて

2

私は、このソリューションがすべての入力でうまく機能しており、特定のウィジェットオプションを探す必要はありません。 (下の優先で)あなたのビューファイルでJSを登録します。

$this->registerJs("   
    $(document).ready(function() { 
     $(document).on('keyup', 'input', function(e){ 
      $(this).val($(this).val().replace(/[,]/g, '.')); 
     }); 
    }); 
"); 

これはへのドットの全ての入力ですべてコンマを変更します。私は自分自身を(もちろん)テストしており、うまくいきます。

あなたが、しかし、これだけが適用されなければならないいくつかの入力は、あなたがそれらのそれぞれにカスタムクラスを追加する必要があり、その後わずかにこのコードを変更しますような方法で変更したい場合は、次の

$this->registerJs("   
    $(document).ready(function() { 
     $(document).on('keyup', '.CustomClassName', function(e){ 
      $(this).val($(this).val().replace(/[,]/g, '.')); 
     }); 
    }); 
"); 

ウィジェットのオプションを使用するよりも優れていると思います。そのようなウィジェットを見つける必要があるからです(このオプションが最初に存在するかどうかわからなくても)カスタムクラスを追加してこのJavaScriptコードを登録することを忘れないでください。

+0

ありがとうございます!これはうまくいくが、$ this-> registerJs( "");を削除しなければならなかった。 @Damian私は参照してください。 –

+0

まあ、うまくいってうれしいよ! –