Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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 - Fatal编程技术网

需要正则表达式进行密码验证,并将特殊字符作为可选条件:java

需要正则表达式进行密码验证,并将特殊字符作为可选条件:java,java,Java,我需要一个必须符合以下条件的正则表达式 条件1:至少1个大写字母 条件2:至少1个小写字母 条件3:至少1位 条件4:特殊字符是可选的,但如果输入字符串中存在特殊字符,则它必须在这些字符中::/\_-()][#“'&$*%+=}{ 以下程序满足条件1、条件2、条件3,但不满足条件4 对于条件4,此正则表达式检查至少1个特殊字符,我希望此检查是可选的 import java.util.regex.Matcher; import java.util.regex.Pattern; public cl

我需要一个必须符合以下条件的正则表达式

条件1:至少1个大写字母
条件2:至少1个小写字母
条件3:至少1位
条件4:特殊字符是可选的,但如果输入字符串中存在特殊字符,则它必须在这些字符中:
:/\_-()][#“'&$*%+=}{

以下程序满足条件1、条件2、条件3,但不满足条件4

对于条件4,此正则表达式检查至少1个特殊字符,我希望此检查是可选的

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PasswordValidation {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String loginpwd = "sssaQjs#d123";
        String LOGIN_PASSWORD_VALIDATION = "(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[\\\\!\"#$%&()*+,./:;=?\\[\\]_{}])(?=\\S+$).{8,15}";
        Pattern password_Pattern = Pattern.compile(LOGIN_PASSWORD_VALIDATION);
        Matcher password_matcher = password_Pattern.matcher(loginpwd);      

        if(password_matcher.matches())
            System.out.println("match");
        else
            System.out.println("doesnot match");
    }
}

将这三个字符类添加到特殊字符的字符类中,就如中所示

String LOGIN_PASSWORD_VALIDATION = "(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?!.*[^\\\\!\"#$%&()*+,./:;=?\\[\\]_{}A-Za-z0-9])\\S{8,15}";
它断言在
[\\\\!\“\\$%&()*+,./:;=?\[\\]\{}a-Za-z0-9]
类之外没有字符。请注意前面的负面展望

由于字符类包含字母和数字,因此特殊字符是可选的。

publicstaticvoidmain(String[]args){
public static void main(String[] args) {
    // TODO Auto-generated method stub
    String password = "sssaQjs#d123";
    boolean hasUppercase = !password.equals(password.toLowerCase());
    boolean hasLowercase = !password.equals(password.toUpperCase());
    boolean hasDigit = password.matches(".*[0-9].*");
    boolean hasSpecial = password.matches(".*<all special characters escaped as alternative>.*");

    if(hasUppercase && hasLowercase && hasDigit && hasSpecial)
        System.out.println("match");
    else
        System.out.println("doesnot match");
}
//TODO自动生成的方法存根 字符串password=“sssaQjs#d123”; 布尔hassuppercase=!password.equals(password.toLowerCase()); 布尔hasLowercase=!password.equals(password.toUpperCase()); 布尔hasDigit=password.matches(“%0-9]”); 布尔hasSpecial=password.matches(“.*”); if(hassuppercase&&hasslowercase&&hassdigital&&hasSpecial) System.out.println(“匹配”); 其他的 System.out.println(“不匹配”); }
我不明白你说的是什么。但在同一时期,我还面临着另一个问题regex@divine对它进行了一点修改。由于Matcher.matches()不需要$anchor方法,该方法尝试与整个字符串完全匹配。您可以尝试一下吗?它适用于我尝试过的情况。不确定取消投票的原因。Naveed,我没有取消投票。我将检查您的编辑并更新您。Xentros,我将验证此方法是否有效,并更新您确保您键入(#|@|…)和双转义\。您需要为java和正则表达式转义它