【问题标题】:Unexpected validation behavior in Angular using ng-patternAngular 中使用 ng-pattern 的意外验证行为
【发布时间】: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


【解决方案1】:

我认为这是你需要的:

<input name="nameInput" type='text' ng-model='user.username' ng-pattern="/^[A-Z0-9]*$/i">

Angular documentation 明确声明您不应使用 g 标志。

正则表达式中的星号表示“零个或多个”,因此空字符串将被视为有效。您可以改用“+”(“一个或多个”),但这意味着当用户尚未在输入字段中键入任何内容时,错误消息将立即出现。您可以改用 ng-required。

【讨论】:

  • 我猜/i修饰符是允许的。
  • 是的,当然,我已将 /i 添加到我的答案中。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-10-03
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 2017-03-16
相关资源
最近更新 更多