【问题标题】:Regex for Password validation first and last letter cannot have a symbol密码验证第一个和最后一个字母的正则表达式不能有符号
【发布时间】:2018-08-09 00:13:41
【问题描述】:

我需要一个用于密码验证的正则表达式。 验证规则-

  • 密码区分大小写
  • 长度不得超过 50 个字符
  • 必须至少包含 1 个数字
  • 必须至少有 1 个符号(非字母或数字)字符
  • 第一个字符不能是符号(非字母或数字)
  • 最后一个字符不能是符号(非字母或数字)
  • 任何字符连续重复的次数不得超过 2 次​​li>
  • 必须至少有 1 个小写字母
  • 必须至少有 1 个大写字母
  • 长度必须至少为 8 个字符

到目前为止我有这个 -

 "^(?!.*(.)\\1{2})(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[^A-Za-z0-9]). 
        {8,50}$"

第一个和最后一个字符不能是符号时不起作用。

我试过了

^[a-zA-Z0-9](?!.*(.)\1{2})(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^A-Za-z0-9]).{6,48}[a-zA-Z0-9]$ 

但它不能正常工作。请帮帮我。

【问题讨论】:

  • Java != Javascript
  • 为什么需要(单个)正则表达式?不能单独验证条件吗?
  • @shmosel 我需要为我正在处理的项目提供一个正则表达式
  • 也给测试用例
  • @I'-'I 例如 Default$123 不适用于第二个正则表达式。对于第一个正则表达式,它将允许任何符号作为第一个和最后一个字符。

标签: java regex


【解决方案1】:

我认为你需要改变方法。您只有一个巨大的可扩展正则表达式的解决方案不符合 Java。 我建议您考虑构建一个可以接受不同规则并将它们组合起来的库。这将更容易测试,对于新人来说更容易理解,更不容易出错并且易于扩展,不像你展示的那种正则表达式。

这里讨论过: Password strength checking library 并建议http://mvnrepository.com/artifact/edu.vt.middleware/vt-password

这里有另一个选项:https://github.com/larcki/validly 所以代码看起来像这样:

import static com.validly.FailFastValidator.*;

public class Validator {

    public void validate(String input) throws ValidationErrorException {
        valid(input)
            .mustNotBeNull("It's null")
            .lengthMustBeAtLeast(2, "It's too short")
            .mustStartWith("Hello", "It doesn't start properly")
            .must(s -> myOwnRule(s), "It doesn't match my own rule");
    }
}

祝你好运!

【讨论】:

    【解决方案2】:

    每个限制都可以向前看:

    ^(?=.*\d).{8,50}
    
    • (无关)密码区分大小写
    • .{8,50} 长度不得超过 50 个字符且长度必须至少为 8 个字符
    • (?=.*\d) 必须包含至少 1 个数字
    • (?=.*(\W|_)) 必须至少有 1 个符号(非字母或数字)字符
    • [^\W_]第一个字符不能是符号(非字母或数字)
    • [^\W_]最后一个字符不能是符号(非字母或数字)
    • (?!.*(.)\1) 任何字符顺序重复不得超过 2 次​​li>
    • (?=.*[a-z]) 必须至少有 1 个小写字母
    • (?=.*[A-Z]) 必须至少有 1 个大写字母

    把它们放在一起:

    ^(?!.*(.)\1)(?=.*\d)(?=.*(\W|_))(?=.*[a-z])(?=.*[A-Z])[^\W_].{6,48}[^\W_]$
    

    live demo

    【讨论】:

      猜你喜欢
      • 2022-06-15
      • 1970-01-01
      • 2014-08-12
      • 2015-12-14
      • 2015-04-24
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      • 2015-09-06
      相关资源
      最近更新 更多