我有这段代码:
<form name="test">
<input type="text" ng-model="code" name="code" ng-pattern="/^code_[0-9]+$/"/>
<div ng-show="test.code.$dirty && test.code.$invalid">
Error:
<span ng-show="test.code.$error.pattern">Pattern fail.</span>
</div>
</form>
我对此代码有2个问题:
“code_232”,“code_232”“code_232”等字符串通过验证。我不是正则表达式的专家,所以这可能是一个与我写的正则表达式有关的问题:/^code_[0-9]+$/
如果我开始编写“code_23892”(正确的字符串),我会收到错误
我还在写作的消息(test.code.$error.pattern = true
)。是否有内置的方法来避免这种情况?所以我的行为是:
如果我写“cod”,输入仍然是焦点:没有错误
如果我写“cod”并且输入失去焦点:错误。
如果我写“a”,“ca”,“coa”等:错误,导致模式已被违反。
这已经可以,或者我已经写了一个客户验证指令来实现这个目标吗?
提前致谢。
答案 0 :(得分:9)
空格不会触发验证失败的原因是因为ng-model会自动修剪该值。如果您不想这样,可以将ng-trim="false"
添加到<input />
。请注意,ng-trim是一个非常新的属性,因此您可能需要更新Angular版本。
关于你的第二个问题;我不认为您可以避免在键入时运行验证,但您可以将代码更改为仅在输入失去焦点时显示错误。我不认为ng-blur
和ng-focus
之类的东西存在,但实现它们应该非常简单。