Angular 模式有时匹配,有时不匹配
我在angular 5中实现了一个模式,在.ts文件中使用以下代码进行密码验证。假设这样做-支持至少八个字符,至少一个大写字母、一个小写字母、一个数字和一个特殊字符。见: 我明白了,当我在密码文本框中输入字符串时,例如Angular 模式有时匹配,有时不匹配,angular,pattern-matching,Angular,Pattern Matching,我在angular 5中实现了一个模式,在.ts文件中使用以下代码进行密码验证。假设这样做-支持至少八个字符,至少一个大写字母、一个小写字母、一个数字和一个特殊字符。见: 我明白了,当我在密码文本框中输入字符串时,例如Niladri1
Niladri1但是,当我输入一个类似Nopasss123代码>,它显示用户名无效。
以下是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}$'