【发布时间】:2015-11-07 20:32:32
【问题描述】:
我在使用 Angular 的内置表单验证器时遇到了一些奇怪的验证行为。在我的用户名 <input> 字段中,我有一个只允许字母或数字 (ng-pattern="/[A-Z0-9]/i") 的 ng 模式。
但是验证并没有按照我期望的方式进行。例如,当我输入一堆符号时,它会识别出用户名输入无效,例如!@#$。但是如果我从几个字母开始,然后输入一堆符号,例如SomeUser!@#$,它会在第一个符号! 上抛出验证错误,但是当我输入第二个符号@ ,它会关闭错误。我输入的每第三或第四个符号都会再次打开/关闭错误。
我尝试查看 Angular 文档,但没有看到任何表明我错误地实现了 ng-pattern。
代码如下:
<form name="signupForm" ng-submit='signup()'>
<input name="nameInput" type='text' ng-model='user.username' ng-pattern = "/[A-Z0-9]/i">
<input name="passwordInput" type="password" ng-model='user.password' ng-pattern = "/[A-Z0-9]/i">
<button>signup</button>
</form>
<span class = 'error' ng-show="signupForm.nameInput.$invalid && signupForm.nameInput.$dirty">Invalid username</span>
【问题讨论】:
-
“我有一个只允许字母或数字的 ng-pattern” - 不,你有一个允许 anything 的模式,只要有是其中的一个字母或数字。您偶尔只会收到一条错误消息,因为 \g 标志允许下一次检查从最后一个匹配开始,而不是从字符串的开头开始。
-
是的,我的正则表达式不正确。谢谢!
标签: javascript angularjs regex validation