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