我有一个输入字段,其值应该恰好是5位数。我想在输入immediatly(onChange)以外的字符时显示错误,但仅在模糊时显示错误的字符串长度错误。
我的规则目前看来是这样的:
ValidationRules
.ensure("myInput")
.matches(new RegExp(/[0-9]/))
.minLength(5)
.on(this);
通过在html中设置maxlength来限制MaxLength。
如果我将验证触发器设置为“onChange”以立即响应错误的字符,那么在输入正确的数字时会显示错误,表示不满足minLength规则,直到键入5个。
我想要的行为是将match-rule onChange和minLength-rule应用于Blur。
是否有可能在不同事件的同一属性上应用两个规则?我知道如何手动验证,但我不知道如何区分规则。
答案 0 :(得分:2)
您可以使用when
流畅的API来满足您的需求。像这样的东西 -
ValidationRules
.ensure('email')
.email()
.required()
.when((order) => {
if (order.length > 4) {
order._ruleHasBeenMet = true;
}
return order.length > 4 && order._ruleHasBeenMet;
}
.withMessage('Email is required when shipment notifications have been requested.');
答案 1 :(得分:0)
在@ PWKad的回答的鼓励下,我和.when()玩了一点,然后想出了这个:
我将验证触发器更改为" validateOnChangeAndBlur"并添加了对我的字段的引用:
<input type="text" value.bind="myInput & validateOnChangeAndBlur" maxlength="5" ref="myInputRef">
我使用条件验证扩展了验证规则,检查输入是否具有焦点,因为我只想在输入失去焦点时验证长度:
ValidationRules
.ensure("myInput")
.matches(new RegExp(/[0-9]/))
.minLength(5)
.when(() => this.dwKapitel !== document.activeElement)
.on(this);
这就像我期望的那样有效。