Angular中带有密码模式的正则表达式问题

时间:2019-08-07 09:17:25

标签: javascript regex angular validation

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

1 个答案:

答案 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一致的.*