FormControl() Validators.pattern()带有此正则表达式表达式的问题,可用于验证1个字符,1个数字,最少8个字符,最多16个字符的密码
通过验证程序的经过测试的密码:
asdfqwer //不应通过验证程序的
zxcvasdf //不应通过验证程序的
asdfqwer2 //正确
未通过验证程序的经过测试的密码:
程序 //没错
在服务器端尝试此模式或使用在线正则表达式测试平台都没有问题
// some code
password: new FormControl('',
[
Validators.minLength(8),
Validators.maxLength(16),
Validators.pattern('^$|^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,16}$')
]),
// some code
答案 0 :(得分:1)
您可以使用
Validators.pattern('(?:(?=[^A-Za-z]*[A-Za-z])(?=\\D*\\d)[A-Za-z\\d]{8,16})?')
Angular将自动用^
和$
括起字符串模式,使其成为'^(?:(?=[^A-Za-z]*[A-Za-z])(?=\\D*\\d)[A-Za-z\\d]{8,16})?$'
。
请注意双反斜杠:在字符串文字中,必须用另一个反斜杠对反斜杠进行转义,以定义文字反斜杠,即正则表达式转义字符。
由于整个模式都包含有一个可选的非捕获组,因此,空字符串也将与该模式匹配。
(?=[^A-Za-z]*[A-Za-z])
和(?=\\D*\\d)
现在没有与principle of contrast一致的.*
。