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

Angular 模式有时匹配,有时不匹配,angular,pattern-matching,Angular,Pattern Matching,我在angular 5中实现了一个模式,在.ts文件中使用以下代码进行密码验证。假设这样做-支持至少八个字符,至少一个大写字母、一个小写字母、一个数字和一个特殊字符。见: 我明白了,当我在密码文本框中输入字符串时,例如Niladri1

我在angular 5中实现了一个模式,在.ts文件中使用以下代码进行密码验证。假设这样做-支持至少八个字符,至少一个大写字母、一个小写字母、一个数字和一个特殊字符。见:

我明白了,当我在密码文本框中输入字符串时,例如
Niladri1Nopasss123,它显示
用户名无效。

以下是angular 5 html的代码:

<div *ngIf="wcode.errors?.pattern">User name not valid.</div> 
我遗漏了什么吗?

你需要使用

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
  • $
    必须添加到模式末尾以“锚定”匹配(即,匹配字符串末尾以确保最大字符限制)
  • [$@$]
    =
    [$@]
    -无需在字符类中重复字符

您是否从中获取解决方案?我刚刚解决了一些问题。在字符类的末尾添加
$
,并删除一个
$
。另外,将
-
放在关闭
]
之前<代码>^(?=.[a-z])(?=.[a-z])(?=.[0-9])(?=.[$!%*?&])[a-Za-z0-9@$!!%*?&-]{8,20}$
应该有效,请参见。@WiktorStribiżew。请再次检查问题,并让我知道。当然,这是因为您没有逃逸连字符,并匹配所有ASCII字母和更多。
wcodePattern = '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[@$!%*?&])[A-Za-z0-9@$_!%*?&-]{8,20}$'
wcodePattern = '^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$_!%*?&-]{8,20}$'