模式有时匹配,有时不匹配

问题描述 投票:1回答:1

我已经在.ts文件中使用以下代码实现了角度为5的模式,以进行密码验证。这样做 - 支持最少八个字符,至少一个大写字母,一个小写字母,一个数字和一个特殊字符。见:Regex for password must contain at least eight characters, at least one number and both lower and uppercase letters and special characters

wcodePattern = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z0-9\d$@$-_!%*?&]{8,20}"; 

我看到,当我在密码文本框中输入一个字符串时,例如Niladri1!它的工作然而,当我输入像Nopasss123!!这样的字符串时,它显示了User name not valid.

下面是angular 5 html的代码:

<div *ngIf="wcode.errors?.pattern">User name not valid.</div> 

我还测试了以下内容,它将字符串作为Noladris,假设无效。

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@-_!])[A-Za-z0-9\d@-_!]{8,20}$

我错过了什么?

angular pattern-matching
1个回答
1
投票

你需要使用

wcodePattern = '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[@$!%*?&])[A-Za-z0-9@$_!%*?&-]{8,20}$'

或者,因为您在RegExp构造函数中使用它,所以这里有一个版本:

wcodePattern = '^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$_!%*?&-]{8,20}$'

注意:

  • 你必须将-放在字符类的开头/结尾以匹配文字连字符,或者将其转义为
  • 字符串文字中的反斜杠必须加倍,否则它们定义转义序列,如\n\t等。
  • 必须在模式的末尾添加$以“锚定”匹配(即匹配字符串的结尾以确保最大字符串限制)。
  • [$@$] = [$@] - 不需要在字符类中重复字符。
© www.soinside.com 2019 - 2024. All rights reserved.