Regex 有没有办法在正则表达式的帮助下确保一个字符串至少包含N个数字、M个大写字母、R个特殊字符?
此外,字符串长度必须大于8个字符,小于30个字符。Regex 有没有办法在正则表达式的帮助下确保一个字符串至少包含N个数字、M个大写字母、R个特殊字符?,regex,Regex,此外,字符串长度必须大于8个字符,小于30个字符。 例如,需要确保字符串(密码)至少有2位数字、3个大写字母和4个特殊字符(如#$%^等)一个正则表达式可以只使用正lookaheads: (?=(.*\d.*){2,})(?=(.*[A-Z].*){3,})(?=(.*[^a-zA-Z\d\s].*){4,})(?=.{8,30}) 解释 这个正则表达式使用多个正向lookahead(前面的(?=)-部分)来检查光标位置后面是否跟有lookahead中表达式的状态。每一个前瞻都涵盖了你的一个条
例如,需要确保字符串(密码)至少有2位数字、3个大写字母和4个特殊字符(如#$%^等)一个正则表达式可以只使用正lookaheads:
(?=(.*\d.*){2,})(?=(.*[A-Z].*){3,})(?=(.*[^a-zA-Z\d\s].*){4,})(?=.{8,30})
解释
这个正则表达式使用多个正向lookahead(前面的(?=)
-部分)来检查光标位置后面是否跟有lookahead中表达式的状态。每一个前瞻都涵盖了你的一个条件
(?=(.*\d.*){2,})
随机位置的两个或多个数字(?=(.[A-Z].*){3,})
三个或更多随机位置的大写字母(?=(.[^a-zA-Z\d\s].*{4,})
四个或更多“特殊”字符(具有特殊含义,无字母、无数字、无空格)(?=.{8,30})
8到30个字符'
)之外,整个正则表达式无法生成匹配项,因为它只覆盖光标位置后面的内容。所以基本上是这样的:字符串中有没有任何位置后跟一个文本部分,它填充了所有这些条件。但它实际上并不搜索匹配项。前瞻cource中的捕获组生成自己的匹配,但第一个组最多只能是一个空字符串
var text=“!1#A$20亿?C”;
var regex=/(?=(.*\d.*){2,})(?=(.*[A-Z].{3,})(?=(.*[^A-zA-Z\d\s].*){4,})(?=.{8,30})/;
var res=正则表达式测试(文本);
var matches=text.match(正则表达式)
警报(res?“匹配”:“不匹配”);
警报(matches.length>0?“有匹配项”:“没有匹配项”);
对于(var i=0;i }
你可以通过大量使用正面表情来做到这一点,但我想这不是最好的方法it@nozzleman我已经试了几个小时了,但是失败了。“为什么这是一种不好的方式?”nozzleman,请解释一下。