判断输入的密码必须有8-30位,必须由字母,数字,和 !, @, #, $, %, ^, &, *, ~等特殊符号组成,而且密码字符串里不能出现我用户名的字符串!
我是这样写的:String regEx = "^(([a-zA-Z])|([0-9])|([!@#$%^&*~])){8,30}$";
但是不能够满足要求!希望高人指点!

解决方案 »

  1.   

    感覺理解不了    
    為什么用|??這是或得意思。。
    你直接(\d[a-z][A-Z][特殊字符]){8,30}不可以嗎?當然有些特殊字符要轉義,前面+個斜杠如上面的*和^
    不能出現用戶名的字符串到最好辦,比好符合要求以后再compare下就可以了
      

  2.   

    $也是不過如果你是在String出來的話可以不用轉
      

  3.   

    private static boolean checkPass(String pass){


    String regEx = "([0-9][a-z][A-Z][!@#$%&~]){8,30}";
    Pattern p = Pattern.compile(regEx);
    Matcher m = p.matcher(pass);
    return m.matches();
    }
         public static void main(String[] args) {

    boolean b = checkPass("ertre%45sdf");
    System.out.println(b);
    }按你的方法不行,这样还是返回false,boolean b = checkPass("ertre%45sdf")应该返回true的
      

  4.   

    String regEx = "[a-zA-Z0-9_!@#$%^&*~]{8,30}";这样也不行
      

  5.   

    ^$沒加
    還有你那個下劃線什么意思啊?
    ^((\d[a-z][A-Z][特殊字符]){8,30})$
    試試看
      

  6.   

    public static void main(String[] args) {

    boolean b = checkPass("hkhkuuyYRGih46!%h");
    System.out.println(b);
    }返回false!
      

  7.   

    我知道,先不管转义的,先把功能实现!判断字符串必须由字母,数字,和   !,   @,   #,   $,   %,   ^,   &,   *,   ~等特殊符号组成!
      

  8.   

    ^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%&~]).{8,30}
    这个也不行!
      

  9.   

    Matcher m1=Pattern.compile("^[0-9a-zA-Z!@#\\$%\\^\\&\\*~]{8,30}$").matcher("12345678");
    System.out.println(m1.matches());以上不能满足匹配不能含有名字的要求,
    只能分开使用
    password.indexOf(username)==-1
    来判断!
      

  10.   

    import java.util.regex.Pattern;public class Test {    public static void main(String[] args) {
            String[] str = {
                    "hkhkuuyYRGi3Hello46!%h$@4545^",
                    "ertre%45sdf@#$%^&*~",
                    "@#$%^&*"
                };
            for(String s : str) {
                System.out.println(checkPass(s, "Hello"));
            }
        }        private static boolean checkPass(String password) {
            return checkPass(password, null);
        }
        
        private static boolean checkPass(String password, String username) {
            String namePattern = "";
            String pattern = "[A-Za-z0-9!@#$%^&*~]{8,30}";
            if(username != null) {
                namePattern = "(?!.*?" + Pattern.quote(username) + ".*?)";
                return password.matches(namePattern + pattern);
            }
            return password.matches(pattern);
        }    
    }
      

  11.   

    有点小问题,改一下:    private static boolean checkPass(String password, String username) {
            String namePattern = "";
            String pattern = "[A-Za-z0-9!@#$%^&*~]{8,30}";
            if(username == null || "".equals(username)) {
                return password.matches(pattern);
            }
            namePattern = "(?!.*?" + Pattern.quote(username) + ".*?)";
            return password.matches(namePattern + pattern);        
        }