我正在使用Yii2 MaskedInput plugin與整數字段的模型。Yii2:驗證屏蔽的輸入
<?= $form->field($model, 'phone')->widget(MaskedInput::classname()([
'mask' => '(999) 999-9999'
]); ?>
當我鍵入文本到這個領域,我得到一個錯誤(電話必須是整數。)
有什麼辦法來驗證這個客戶端和服務器上沒有自定義驗證口罩?
我正在使用Yii2 MaskedInput plugin與整數字段的模型。Yii2:驗證屏蔽的輸入
<?= $form->field($model, 'phone')->widget(MaskedInput::classname()([
'mask' => '(999) 999-9999'
]); ?>
當我鍵入文本到這個領域,我得到一個錯誤(電話必須是整數。)
有什麼辦法來驗證這個客戶端和服務器上沒有自定義驗證口罩?
MaskedInput只會生成一個文本字段。我認爲你的手機字段被存儲爲一個整數。您必須將手機字段的驗證更改爲文本,而不是整數。您可能需要更改字段類型在數據庫中是VARCHAR(14)
你可以把在MaskedInput removeMaskOnSubmit爲true,這樣
<?= $form->field($model, 'phone')->widget(MaskedInput::classname()([
'mask' => '(999) 999-9999',
'clientOptions' => [
'removeMaskOnSubmit' => true,
]); ?>
所以你要禁用的客戶端驗證形式
$form = ActiveForm::begin([
'enableClientValidation'=>false,
]); ?>
我有類似的問題,並與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
。我保存了原始的驗證函數(因爲我有一些其他規則,如required
和number
,我真的懶得再次編寫它們),並使用正則表達式刪除掩碼,然後使用新值運行原始驗證函數。你只需要爲你的案例制定一個正則表達式,並使用這種方法來解決問題。