我正在使用Yii2 MaskedInput plugin和一个整数字段的模型。
<?= $form->field($model, 'phone')->widget(MaskedInput::classname()([
'mask' => '(999) 999-9999'
]); ?>
当我在此字段中键入文本时,我收到错误(电话必须是整数。)
有没有办法在没有自定义验证掩码的情况下在客户端和服务器上验证这一点?
答案 0 :(得分:4)
MaskedInput只会生成一个文本字段。我假设您的手机字段存储为整数。您必须将手机字段的验证更改为文本,而不是整数。您可能需要将数据库中的字段类型更改为varchar(14)
答案 1 :(得分:1)
您可以将MaskedInput removeMaskOnSubmit设置为true,就像这样
public class MyVector<T> where T : (base class or interface of the Precision classes)
因此您必须在表单
上禁用客户端验证<?= $form->field($model, 'phone')->widget(MaskedInput::classname()([
'mask' => '(999) 999-9999',
'clientOptions' => [
'removeMaskOnSubmit' => true,
]); ?>
答案 2 :(得分: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
。我保存了原始的验证功能(因为我有一些其他规则,如required
和number
,我真的很懒,再次编写它们)并使用正则表达式删除掩码,然后使用new运行原始验证函数值。您只需要为您的案例制作正则表达式,并使用此方法来解决问题。