5

我有这个代码:

<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>

这段代码有两个问题:

  1. “code_232”、“code_232”、“code_232”等字符串通过了验证。我不是正则表达式的专家,所以这可能是一个与我写的正则表达式相关的问题:/^code_[0-9]+$/

  2. 如果我开始写“code_23892”(一个正确的字符串),当我还在写(test.code.$error.pattern = true)时我会收到错误消息。有没有一种内置的方法可以避免这种情况?所以我想要的行为是:

如果我写“cod”,并且输入仍然有焦点:没有错误

如果我写“cod”并且输入失去焦点:错误。

如果我写“a”、“ca”、“coa”等:错误,导致模式已经被违反。

这已经可能吗,或者我已经编写了一个客户验证指令来实现这一点?

提前致谢。

4

1 回答 1

9

空格不会触发验证失败的原因是 ng-model 会自动修剪该值。如果你不想这样,你可以添加ng-trim="false"到你的<input />. 请注意,ng-trim 是一个相当新的属性,因此您可能需要更新您的 Angular 版本。

关于你的第二个问题;我认为您无法避免在键入期间运行验证,但您可以更改代码以仅在输入失去焦点时显示错误。我不认为存在类似的东西ng-blurng-focus但实现它们应该很简单。

于 2013-02-21T15:29:58.427 回答