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

卡塔克斯

使用此正则表达式的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
维克多·史翠比维

您可以使用

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)现在没有.*,这与该行的对比原则

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章