当前位置: 首页 > 面试题库 >

Java用于密码验证的Regexp Java

太叔马鲁
2023-03-14
问题内容

我正在创建用于密码验证的正则表达式,以在Java应用程序中用作配置参数。

regexp是:

^.*(?=.{8,})(?=..*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$

密码策略为:

  • 至少8个字符
  • 包含至少一位数字
  • 包含至少一个较低的alpha字符和一个较高的alpha字符
  • 在一组特殊字符(@#%$^等)中包含至少一个字符
  • 不包含空格,制表符等。

我只缺少第5点。我无法进行正则表达式检查空间,制表符,回车等。

有人可以帮我吗?


问题答案:

尝试这个:

^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\S+$).{8,}$

说明:

^                 # start-of-string
(?=.*[0-9])       # a digit must occur at least once
(?=.*[a-z])       # a lower case letter must occur at least once
(?=.*[A-Z])       # an upper case letter must occur at least once
(?=.*[@#$%^&+=])  # a special character must occur at least once
(?=\S+$)          # no whitespace allowed in the entire string
.{8,}             # anything, at least eight places though
$                 # end-of-string

由于每个规则都是独立的“模块”,因此添加,修改或删除单个规则很容易。

所述(?=.*[xyz])构建体吃整个字符串(.*)和回溯到第一次出现在那里[xyz]可以匹配。如果[xyz]找到则成功,否则失败。

另一种选择是使用一个勉强的限定词:(?=.*?[xyz])。对于密码检查,这几乎没有什么区别,对于更长的字符串,这可能是更有效的变体。

当然,最有效的变体(但最难读取和维护,因此最容易出错)(?=[^xyz]*[xyz])。对于这种长度的正则表达式,并为此目的,我不建议这样做,因为它没有实际好处。



 类似资料:
  • 我试图为我用JavaScript制作的密码验证程序开发一个regex表达式。 要求 null

  • 问题内容: 假设我试图从使用基本身份验证/基本证书的RESTful API中提取信息,那么在该程序中存储该用户名和密码的最佳方法是什么?现在,它只是以纯文本格式坐在那里。 有什么方法可以做到更注重安全性吗? 问题答案: 在@ Damien.Bell的请求下,以下示例涵盖了第一步和第二步: 一个解决每个保护步骤的完整示例将远远超出我认为对该问题的合理范围,因为它是关于“步骤是什么”而不是“如何应用它

  • 所以问题是:应该如何正确验证密码?

  • 问题内容: 谁能帮助我创建用于密码验证的正则表达式。 条件为“密码必须包含8个字符和至少一个数字,一个字母和一个唯一字符,例如 问题答案:

  • 问题内容: 我正在用Java进行基于密码的文件加密;我正在使用AES作为底层加密算法,并使用以下代码(我是从该网站的另一位慷慨的海报获得者)从盐和密码的组合中得出密钥的。 我吃了盐,用户在两端输入密码,加密和解密工作正常:-)我的问题是,我希望能够在进入(可能很长)之前验证用户输入的密码是否正确解密过程。我知道PBKD规范包含一个可选的2字节验证值,但是我不确定如何使用上述方法生成该值。Java是

  • 我只是在实现一个基本的CRUD服务,用户可以在数据库中创建,其密码与特定的正则表达式匹配,并使用进行编码。 我的测试失败,因为密码上有一个,表示它不满足regex要求: 它没有陷入我的,因为它抛出了一个,而不是一个。我调试并发现,当它试图匹配给定的正则表达式时,密码本身的值显示为: 而被传递的密码是: 因此,验证似乎是在加密密码而不是原始密码上运行的。我认为验证应该在方法中接收的对象上进行,然后再