regex只包含lookaheads,这是一种非消耗模式,它只检查字符串中是否存在某些文本,但实际上它们不会移动regex索引,也不会将匹配的文本放入匹配值中。这里验证的regex必须
消费
整根绳子。
最简单的方法是将长度检查lookahead转换为消费模式:
'regEx': '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).{8,}'
^^^^^
实际上,如果使用对比原则,可以创建更好的密码regexps:
'regEx': '^(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=[^0-9]*[0-9]).{8,}'
细节
-
^
-字符串开头
-
(?=[^a-z]*[a-z])
-(在字符串开始处执行一次检查的正前视)在0+个字符(小写ASCII字母除外)之后,必须有小写ASCII字母
-
(?=[^A-Z]*[A-Z])
-(在字符串开始处执行一次检查的正前视)在除大写ASCII字母之外的0+个字符之后,必须有一个大写ASCII字母
-
(?=[^0-9]*[0-9])
-(在字符串开始处执行一次检查的正前视)在除数字之外的0+个字符之后,必须有一个数字
-
.{8,}
-8个或更多字符,换行字符除外。