Angular:ng-pattern验证被min / maxlength覆盖

时间:2015-03-09 13:24:09

标签: regex angularjs validation

不确定我是否遗漏了某些东西,或者这是否是一个真正的错误。 我正在运行角度1.2.9(我们仍然支持IE8),我正在构建一个由对象动态生成的表单。

<input ng-maxlength="{{data.MaxLength}}"
           ng-minlength="{{data.MinLength}}"
           ng-required="data.Required"
           ng-pattern="/[a-zA-ZàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð \-']+/"
           ng-switch-when="input"
           type="{{data.Type}}"
           ng-model="formData[data.Name]" 
           name="{{data.Name}}" />

<p ng-if="form[data.Name].$error.pattern">
        {{data.PatternValidationMessage}}
    </p>
    <p ng-if="form[data.Name].$error.maxlength || form[data.Name].$error.minlength">
        {{data.LengthValidationMessage}}
    </p>
    <p ng-if="form[data.Name].$error.required">
        {{data.RequiredValidatorMessage}}
    </p>

所以,如果模式不匹配,如果字段未填充且输入与最小或最大条件不匹配,我希望显示一条消息。

问题:

如果我只输入"@[]",它会触发模式验证消息,但是如果我输入"@[][]abc"它会清除所有错误消息,并添加一个ng-valid-pattern类(很明显无效的)。

它就像它一次只匹配一个,或者当输入有"abc"时它认为模式是有效的。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

你用&#34来击中头部的钉子;当输入有abc时,它认为该模式是有效的。&#34;

您需要添加&#34; ^&#34;从一开始就是&#34; $&#34;到你的模式结束,所以:

"/^[a-zA-Z.......]$/"

使模式从输入字符串的开头到结尾匹配,否则包含该模式的任何输入字符串都将匹配。