我正在使用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
,我真的懒得再次编写它们),并使用正则表达式删除掩码,然后使用新值运行原始验证函数。你只需要为你的案例制定一个正则表达式,并使用这种方法来解决问题。