java - 密码验证正则表达式android

标签 java android regex string

我需要进行以下密码验证:

  1. 最少字符数为 8,最多字符数为 15
  2. 至少有 1 个数字和 1 个特殊字符 (! @#$%^&*-=+?.);
  3. 至少一个小写字母
  4. 密码不应是用户名和电子邮件的子字符串(最小长度 3,最大长度 15)。
  5. 密码应区分大小写。

我也看过这些answers但我很困惑,我应该使用输入过滤器来实现这个还是正则表达式?

任何帮助将不胜感激。如果您能提供一个可行的解决方案,那就太好了。

最佳答案

public class Validation {

    public static void main(String[] args) {  
       String pass = "1AB%CDef555";
       String username = "manna";
       String email = "mannx@rtt.com";
       System.out.println(validiate2(pass, username,email));
    }
    // if you don't care why it fails and only want to know if valid or not 
    public static boolean validiate (String pass, String username, String email){
        String pattern = "^(?=.*[0-9])(?=.*[a-z])(?=.*[!@#$%^&*+=?-]).{8,15}$";
        if(pass.matches(pattern)){
            for(int i=0;(i+3)<username.length();i++){
                if(pass.contains(username.substring(i,i+3)) || username.length()<3 || username.length()>15){
                   return false; 
                }                  
            }
            for(int i=0;(i+3)<email.length();i++){
                if(pass.contains(email.substring(i,i+3)) || email.length()<3 || email.length()>15){
                   return false; 
                }                  
            }
            return true;
        }
        return false;    
    }
    // if you want to know which requirement was not met
    public static boolean validiate2 (String pass, String username, String email){
        if (pass.length() < 8 || pass.length() >15 ){
            System.out.println("pass too short or too long");
            return false;
        }
        if (username.length() < 3 || username.length() >15 ){
            System.out.println("username too short or too long");
            return false;
        }
        if (!pass.matches(".*\\d.*")){
            System.out.println("no digits found");
            return false;
        } 

        if (!pass.matches(".*[a-z].*")) {
            System.out.println("no lowercase letters found");
            return false; 
        }
        if (!pass.matches(".*[!@#$%^&*+=?-].*")) {
            System.out.println("no special chars found");
            return false; 
        } 
        if (containsPartOf(pass,username)) {
            System.out.println("pass contains substring of username");
            return false; 
        }
        if (containsPartOf(pass,email)) {
            System.out.println("pass contains substring of email");
            return false; 
        }
        return true;           
    }

    private static boolean containsPartOf(String pass, String username) {
        int requiredMin = 3
        for(int i=0;(i+requiredMin)<username.length();i++){
            if(pass.contains(username.substring(i,i+requiredMin))){
               return true; 
            }                  
        }
        return false;        
    }    
}

关于java - 密码验证正则表达式android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40839559/

相关文章:

java - Lucene - 如何查询文本和过滤数字范围

Java GPU 编程

android - MixPanelAPI NoClassDefFoundError

python - 正则表达式在 python 中匹配和清理引号

java - 解析Jetty日志记录

java - Android Checkable ListView 项目保持选中状态

安卓 : multiple audio tracks in a VideoView?

android - repo init 后如何覆盖 default.xml

regex - 如何检查一个字符串是否完全匹配 Scala 中的正则表达式?

java - 如何创建将 List<List<Integer>> 和 List<List<Double>>(可能更多)转换为字符串的函数?