gpt4 book ai didi

java - 正则表达式字符长度限制未通过单元测试

转载 作者:太空宇宙 更新时间:2023-11-04 08:24:33 25 4
gpt4 key购买 nike

我不太擅长创建复杂的正则表达式。我从另一个来源复制了以下内容,以便对应用程序强制实现某种密码限制:

// 8 to 20 char, one digit, one letter
public static final String GOOD_PASSWORD_REGEX =
"(^(?=.{8,20})(?=.*[a-zA-Z])(?=.*[\\d]).*$)";

同时,此单元测试失败:

String tooLongPassword = "asdfghjkl123456789qwe";  // 21 characters
assertFalse(tooLongPassword.matches(ValidationContants.GOOD_PASSWORD_REGEX));

这是我针对此正则表达式运行的少数类似测试用例之一,包括其他没有字母、数字等的测试用例,其余的都通过了。

请问哪里出错了?

最佳答案

在您的版本中,先行断言仅检查它是否可以匹配字符串开头的 8-20 个字符长度的字符串。当然,这对于长度为 21 及以上的字符串也能成功。

因此 $ 需要成为前瞻的一部分:

// 8 to 20 char, one digit, one letter
public static final String GOOD_PASSWORD_REGEX =
"(^(?=.{8,20}$)(?=.*[a-zA-Z])(?=.*\\d).*$)";

但是为什么要对密码施加最大长度限制呢?此外,\d 快捷方式周围的 [] 也是不必要的。

此外,由于您只需要正则表达式来验证密码,而不是实际返回密码(因为现在的设置方式它将返回整个输入字符串),因此您可以将正则表达式缩短为:

"^(?=.{8,20}$)(?=.*[a-zA-Z])(?=.*\\d)"

关于java - 正则表达式字符长度限制未通过单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8872227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com