Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 密码的模式匹配失败_Java_Regex - Fatal编程技术网

Java 密码的模式匹配失败

Java 密码的模式匹配失败,java,regex,Java,Regex,我的密码条件是,至少8个字符,至少一个特殊字符,至少一个数字 为此,我编写了一个简单的类进行验证,但最终失败了 非常感谢您的帮助 public class PasswordVerifier { private static final String SPECIAL_CHARACTERS = "(`~!@#$%^&*()_+=-][;'/.,\\<>?|:\"}{)"; public static void main(String... args) {

我的密码条件是,至少8个字符,至少一个特殊字符,至少一个数字

为此,我编写了一个简单的类进行验证,但最终失败了

非常感谢您的帮助

public class PasswordVerifier {
    private static final String SPECIAL_CHARACTERS = "(`~!@#$%^&*()_+=-][;'/.,\\<>?|:\"}{)";

    public static void main(String... args) {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        try {
            String password = in.readLine();
            if(!password.matches("^.*(?=.{8,})(?=.*[0-9])(?=.*[SPECIAL_CHARACTERS]).*$")){
                System.out.println("Password does not satisfy compliant");
            } else {
                System.out.println("Yes.. gets through");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
公共类密码验证器{
私有静态最终字符串特殊字符=“(`~!@$%^&*()\+=-][;”/,\ \?\:\“}{”;
公共静态void main(字符串…参数){
BufferedReader in=新的BufferedReader(新的InputStreamReader(System.in));
试一试{
字符串密码=in.readLine();
如果(!password.matches(“^.*(=.{8,})(?=.[0-9])(?=..[SPECIAL_CHARACTERS]).*$”){
System.out.println(“密码不符合要求”);
}否则{
System.out.println(“是..通过”);
}
}捕获(IOE异常){
e、 printStackTrace();
}
}
}

这可能适合您的要求:

private static final String SPECIAL_CHARACTERS = "(`~!@#$%^&*()_+=-\\]\\[;'/.,\\<>?|:\"}{)";

public static void main(String[] args) {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    try {
        String password = in.readLine();
        if(!password.matches("((?=.*\\d)(?=.*["+SPECIAL_CHARACTERS+"]).{8,})")){
            System.out.println("Password does not satisfy compliant");
        } else {
            System.out.println("Yes.. gets through");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
private static final String SPECIAL_CHARACTERS=“(`~!@$%^&*()\+=-\\]\[;”/,\\?:\“}{)”;
公共静态void main(字符串[]args){
BufferedReader in=新的BufferedReader(新的InputStreamReader(System.in));
试一试{
字符串密码=in.readLine();
如果(!password.matches(((?=.*\\d)(?=.[“+特殊字符+”).{8,})”){
System.out.println(“密码不符合要求”);
}否则{
System.out.println(“是..通过”);
}
}捕获(IOE异常){
e、 printStackTrace();
}
}
正则表达式指定:

  • 输入必须包含0-9之间的一位数字
  • 必须在您定义的特殊字符列表中包含一个特殊符号
  • 长度应至少为8个字符

这可能适合您的要求:

private static final String SPECIAL_CHARACTERS = "(`~!@#$%^&*()_+=-\\]\\[;'/.,\\<>?|:\"}{)";

public static void main(String[] args) {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    try {
        String password = in.readLine();
        if(!password.matches("((?=.*\\d)(?=.*["+SPECIAL_CHARACTERS+"]).{8,})")){
            System.out.println("Password does not satisfy compliant");
        } else {
            System.out.println("Yes.. gets through");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
private static final String SPECIAL_CHARACTERS=“(`~!@$%^&*()\+=-\\]\[;”/,\\?:\“}{)”;
公共静态void main(字符串[]args){
BufferedReader in=新的BufferedReader(新的InputStreamReader(System.in));
试一试{
字符串密码=in.readLine();
如果(!password.matches(((?=.*\\d)(?=.[“+特殊字符+”).{8,})”){
System.out.println(“密码不符合要求”);
}否则{
System.out.println(“是..通过”);
}
}捕获(IOE异常){
e、 printStackTrace();
}
}
正则表达式指定:

  • 输入必须包含0-9之间的一位数字
  • 必须在您定义的特殊字符列表中包含一个特殊符号
  • 长度应至少为8个字符

我不会费心去写正则表达式。包含所有条件的r.e.将很难编写,更难理解,可能效率也不高。只需明确地编写您的要求:

boolean isAcceptablePassword(String pwd) {
    boolean numeric = false, special = false;
    if (pwd.length() >= 8) {
        for (int i = pwd.length() - 1; !numeric && !special && i >= 0; --i) {
            char c = pwd.charAt(i);
            numeric = numeric || Character.isDigit();
            special = special || SPECIAL_CHARACTERS.indexOf(c) >= 0;
        }
    }
    return numeric && special;
}

我不想费心去写正则表达式。包含所有条件的r.e.将很难编写,更难理解,可能效率也不高。只需明确编写您的要求:

boolean isAcceptablePassword(String pwd) {
    boolean numeric = false, special = false;
    if (pwd.length() >= 8) {
        for (int i = pwd.length() - 1; !numeric && !special && i >= 0; --i) {
            char c = pwd.charAt(i);
            numeric = numeric || Character.isDigit();
            special = special || SPECIAL_CHARACTERS.indexOf(c) >= 0;
        }
    }
    return numeric && special;
}

您不能有
]或<代码> -/COD>在字符类中,因为它们对字符类语法有意义。如果要在字符类中,它们必须是类中的前两个元素,<代码> -/代码>在代码> > /代码> .< /P> < P> >如果字符类,则不能在中间字符字符类中使用< <代码> > /代码>或<代码> ->代码>。字符类语法的一种含义。如果要将它们放在其中,它们必须是类中的前两个元素,
-
]

什么是“之前,但最终失败。"应该是什么意思?它只会在某些特殊字符中失败吗?您确认过当特殊字符被合并时,所有字符都会被适当转义吗?我从来没有见过形成正则表达式字符串的方法。您确定它有效吗?并且您不只是需要文本“特殊字符”中的一个字符吗存在字符?是否有一个竞赛要求您在一个竞赛中完成所有任务?执行三个单独的测试:Test1:Length>=8。Test2:包含一个特殊字符。Test3:包含一个数字。更简单的解决方案带来的可维护性有很多价值。什么是“但最终失败”应该是什么意思?它只会在某些特殊字符中失败吗?您确认过当特殊字符被合并时,所有字符都会被适当转义吗?我从来没有见过形成正则表达式字符串的方法。您确定它有效吗?并且您不只是需要文本“特殊字符”中的一个字符吗存在字符?是否有比赛要求您在一个比赛中完成所有任务?请执行三个单独的测试:Test1:Length>=8。Test2:包含特殊字符。Test3:包含数字。更简单的解决方案带来的可维护性有很大价值。该模式仍然无法工作,因为
特殊字符
包含“]”,这将破坏r.e.语法。这对我来说很有效。。我的错!。没有连接特殊字符串,它在特殊字符上失败。感谢大家的快速响应。@TedHopp:但我用“\\]”跳过了“]”这个模式仍然不起作用,因为
特殊字符
包含“]”,这将破坏r.e.语法。这对我来说很有效。。我的错!。没有连接特殊字符串,它在特殊字符上失败。谢谢大家的快速响应。@TedHopp:但我用“\\]”转义了“]”