ngPattern指令的问题

时间:2013-02-21 15:08:15

标签: regex validation angularjs angularjs-directive

我有这段代码:

<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个问题:

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

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

  3.   

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

         

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

         

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

    这已经可以,或者我已经写了一个客户验证指令来实现这个目标吗?

    提前致谢。

1 个答案:

答案 0 :(得分:9)

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

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