我正在尝试解决密码检查器挑战,我已经到了一个字符串与两个表达式匹配的阶段。
规则:
- 对于少于 6 个字符的任何字符串返回“太短”
如果字符串少于 12 个字符、具有一个或多个下划线、数字或大写/小写字母混合,则返回 'okay'
var str = 'aBB33' var lessthansixRegex = new RegExp(/^(?=.*?[a-z])(?=.*?[A-Z])|(?=.*?\d{1}){0,6}$/); var okayRegex = new RegExp(/(?=.*?[a-z])(?=.*?[A-Z])|(?=.*?\d{1})|(?=.*?[_]{1})/); if (okayRegex.test(str) && str.length < 12) { return 'okay'; } else if (tooshortRegex.test(str) && str.length < 6) { return 'too short'; }
有没有办法检查这个,或者挑战的参数是否搞砸了。
您可能很容易发现的一个解决方案是缺少“”,但是“好的”正则表达式必须将该参数作为或“|”因为还有其他不需要匹配的字符串也不包含“”。
如果您发现任何其他错误,请随时告诉我。
非常感谢!
最佳答案
我认为你在这里把事情搞得太复杂了,为什么不检查字符串长度而不是为它写一个正则表达式呢?另外我认为你的正则表达式可以更简单:
var str = 'aBB33';
var okayRegex = /[_\d]|[A-Z]+.*[a-z]+|[a-z]+.*[A-Z]+/;
if (str.length < 6 || str.length > 11) {
return 'password must be between 6 & 11 characters';
} else if (okayRegex.test(str)) {
return 'ok';
} else {
return 'invalid password';
}
鉴于这是关于正则表达式的,让我解释一下发生了什么:
[_\d] // match any underscore or digit (number)
| // or (checks whether what's before or after is true)
[A-Z]+.*[a-z]+ // check for at least one A-Z followed by any gap
// of characters followed by at least one a-z
| // or
[a-z]+.*[A-Z]+ // reverse of last check (lower then upper)
希望对您有所帮助!
关于javascript - RegEx 如何在使用匹配组的同时检查字符串的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43188077/