angularjs - 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>
解决方案
问题是您的 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 将您的输入解析为正则表达式,这就是为什么某些符号失败的原因,例如 $(美元符号),因为 $ 是正则表达式中的保留关键字。
推荐阅读
- powershell - 尝试使用 NTFSSecurity powershell 模块导出共享中的所有权限
- java - 使用带有 JNA 和 gst1-java-core 的 Gstreamer for Android?
- javascript - 如何将 Promise 方法转换为 Angular 10 中的 rxjs Observables
- ios - 是否存在相当于 CGPath 的 `addArc(tangent1End:tangent2End:radius:transform:)` 的 UIBezierPath ?
- docker - 作为 Docker Compose 服务启动的容器中的进程如何找出它的 IPv4 和 IPv6 地址?
- angular - Angular 无法识别 index.html 中的 Google gtag
- html - css 彩色列表项使文本不整洁
- javascript - Javascript aws lambda无法解释的行为
- javascript - 编写代码以连接 HTML5 画布上的点
- c++ - 输出 C++ 中缺少字符