首页 > 解决方案 > AngularJS - 表单上的 ng-pattern 对于某些特殊符号(如美元符号)失败

问题描述

我正在用 AngularJS 1.5 编写一个应用程序。我正在尝试编写一个功能,用户可以在应用程序中验证他们的密码,并且我正在使用 ng-messages 来尝试验证表单。

我的 from 有 2 个字段:密码和确认密码。两个验证条件是:两个密码都是必需的,并且密码必须匹配。

我遇到的问题是一些特殊字符的模式匹配失败。它对美元符号失败,但不是所有特殊字符。我需要它适用于所有角色。

这是我的 JSFiddle:http: //jsfiddle.net/aubz88/gm0obnqf/69/

一段代码:

  <div>
    <label 
      class="item" 
      ng-class="{ 'has-error' : vm.verifyPassword.password.$invalid && (vm.verifyPassword.$submitted || vm.verifyPassword.$dirty) }">
    <span class="input-label">Password</span>
    <input
      id="password"
      type="password"
      name="password"
      ng-model="vm.data.password"
      placeholder="password"
      required>
    </label>
  </div>

标签: angularjsformsng-messagesangularjs-ng-pattern

解决方案


问题是您的 JSFiddle 中的这一行,您将 vm.data.password(作为字符串)传递给 ng-pattern。

ng-pattern="vm.data.password"

根据 ngPattern https://docs.angularjs.org/api/ng/directive/ngPattern#ngPattern-arguments的参数部分的文档:

“AngularJS 表达式必须计算为 RegExp 或可解析为 RegExp 或 RegExp 文字的字符串。”

因此 AngularJS 将您的输入解析为正则表达式,这就是为什么某些符号失败的原因,例如 $(美元符号),因为 $ 是正则表达式中的保留关键字。


推荐阅读