【问题标题】:Regex mix of at least 2 characters (alphabetic, numeric, punctuation, special character)至少 2 个字符的正则表达式组合(字母、数字、标点符号、特殊字符)
【发布时间】:2016-07-15 15:29:16
【问题描述】:

我正在尝试为密码字段创建一个正则表达式,以检查输入是否包含至少两个字符集(字母、数字、标点符号、特殊字符)的混合。另外,第一个和最后一个字符不能是数字,长度必须至少为 8 个字符。

我从来没有处理过正则表达式的条件逻辑,所以这可能就是我遇到这么困难的原因。到目前为止,这(但它没有按预期工作):

(?=.{8,})(\d.*[a-zA-Z])|(?=.{8,})([a-zA-Z].*\d)|(?=.{8,})(\W.*\d)|(?=.{8,})(\d.*\W)|(?=.{8,})(\W.*[a-zA-Z])|(?=.{8,})([a-zA-Z].*\W)|(?=.{8,})([a-z].*[A-Z])|(?=.{8,})([A-Z].*[a-z])

【问题讨论】:

    标签: regex


    【解决方案1】:

    就个人而言,我不会使用单个正则表达式来执行此操作。为什么不通过一组更简单的运行它,只是为了省去不可避免的维护问题呢?类似的东西(按顺序,伪代码):

    // First and last are non-numeric and length check
    if (!regex_check(pass, /^[^0-9].{6}.*[^0-9]$/)) return false
    
    regexes = {/[a-zA-Z]/, /[0-9]/, /\p{P}|\p{Sc}|\^/} // Different character categories
    
    numCategories = 0
    for r in regex
        if (regex_check(pass, r)) numCategories += 1
    
    if numCategories >= 2 return true
    return false
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      相关资源
      最近更新 更多