2015-12-15 47 views
1


我正在使用Yii2 MaskedInput plugin與整數字段的模型。Yii2:驗證屏蔽的輸入

<?= $form->field($model, 'phone')->widget(MaskedInput::classname()([ 
    'mask' => '(999) 999-9999' 
]); ?> 

當我鍵入文本到這個領域,我得到一個錯誤(電話必須是整數。

有什麼辦法來驗證這個客戶端和服務器上沒有自定義驗證口罩?

回答

3

MaskedInput只會生成一個文本字段。我認爲你的手機字段被存儲爲一個整數。您必須將手機字段的驗證更改爲文本,而不是整數。您可能需要更改字段類型在數據庫中是VARCHAR(14)

0

你可以把在MaskedInput removeMaskOnSubmit爲true,這樣

<?= $form->field($model, 'phone')->widget(MaskedInput::classname()([ 
'mask' => '(999) 999-9999', 
'clientOptions' => [ 
    'removeMaskOnSubmit' => true, 
]); ?> 

所以你要禁用的客戶端驗證形式

$form = ActiveForm::begin([ 
    'enableClientValidation'=>false, 
]); ?> 
0

我有類似的問題,並與beforeValidateAttribute事件,該代碼輕鬆解決它:

$('#w0').on('beforeValidateAttribute', function (e) { 
    var paymentAmountElement = $('#w0').yiiActiveForm('find', 'payment-amount'); 
    var oldValidate = paymentAmountElement.validate; 

    paymentAmountElement.validate = function (attribute, value, messages, deferred, form) { 
     value = !value.length ? value : value.match(/\d+/g).join(''); 
     oldValidate(attribute, value, messages, deferred, form); 
    } 
}); 

我有一個amount輸入payment模型,所以它的ID是payment-amount。我保存了原始的驗證函數(因爲我有一些其他規則,如requirednumber,我真的懶得再次編寫它們),並使用正則表達式刪除掩碼,然後使用新值運行原始驗證函數。你只需要爲你的案例制定一個正則表達式,並使用這種方法來解決問題。