【问题标题】:Regex password validation add underscore like special symbol正则表达式密码验证添加下划线,如特殊符号
【发布时间】:2016-10-14 07:08:55
【问题描述】:

密码必须包含: 1 大写字母 1 个小写字母 1 位数 1 个特殊符号 最少 8 个符号

这是我的正则表达式:

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

但是当我尝试使用密码进行验证时:Test_123 它返回给我false

这是我的代码:

public class PasswordCheck {

    static Logger logger = Logger.getLogger(CommonHelper.class);

    private static final String PASSWORD_PATTERN = "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@_$%^&*-]).{8,}$";

    private Pattern pattern;
    private Matcher matcher;

    public PasswordCheck() {
        pattern = Pattern.compile(PASSWORD_PATTERN);
    }

    /**
     * Validate password with regular expression
     * 
     * @param password
     *            password for validation
     * @return true valid password, false invalid password
     */
    public boolean validate(final String password) {

        matcher = pattern.matcher(password);
        System.out.println(password);
        System.out.println(matcher.matches());
        return matcher.matches();

    }

}

我只是尝试使用相同的文本在验证函数中设置新字符串:Test_1523 并返回 true,但是当我通过休息服务发布此字符串并将其传递给函数时返回 false

【问题讨论】:

  • 我检查了regexr.com 和正则表达式没关系,请你发布你的代码吗?
  • 你设置了不区分大小写的修饰符吗?
  • 在“matcher = pattern.matcher(password);”上添加断点验证方法内的行并查看“密码”参数的值是多少。我只是想检查它是否包含任何其他字符。
  • 我深入研究并意识到问题不是正则表达式,而是来自休息服务的字符串。仍然不知道为什么,但是当我像这样格式化它时: byte bytes[] = pass.getBytes("ISO-8859-1"); String checkPassword = new String(bytes, "UTF-8"); if (passCheck.validate(checkPassword)) { 它开始正常工作。

标签: java regex


【解决方案1】:

无论您是使用正则表达式还是其他方式来验证这些字符串 - 但请:不要将所有内容都放入一段代码或正则表达式中。

您想要创建易于阅读和维护的代码;并且包含如此多“编码”知识的单个正则表达式对此无济于事。我不止一次使用过类似的东西

interface PasswordValidator {
  boolean isValid(String input);
  String getErrorMessage();
}

然后创建实现此类接口的各种类。最后,您只需为每个实现类创建一个对象;您可以将它们放入一些静态列表中。然后验证意味着:只需运行该列表中的所有验证器对象。如果失败,您可以直接向用户询问错误消息(这样您就可以准确地告诉他缺少什么;而不是再次将整个规则集扔给他)。

并不是说总是需要这样的东西,但根据我的经验:密码规则可能会经常更改。将它们硬烘焙成正则表达式很少是一种持久的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-12
    • 2012-08-18
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多