javascript - RegEx 如何在使用匹配组的同时检查字符串的长度

标签 javascript regex

我正在尝试解决密码检查器挑战,我已经到了一个字符串与两个表达式匹配的阶段。

规则:

  • 对于少于 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/

相关文章:

regex - R 使用 tidyr::separate 在最后一个空白字符处拆分字符串

regex - 使用 sed 提取 XML 文件的元素内容

javascript - 如何立即取消续订?

javascript - jqplot对多个具有相同名称和颜色的数据系列进行分组和标记

javascript - 如何在ajax url中传递下拉列表的值

javascript - 如何从 Javascript 中的迭代器内部返回一个值

java - 正则表达式在特定字符串行中查找整数

javascript - Node JS,如何从P12文件中提取X.509证书?

javascript - 如何使用 replace() 替换 Javascript 中的星号?

javascript - 如何检索 translate3d 的值?