天天看點

關于頁面輸入字元串、轉義 java.util.regex.PatternSyntaxException Dangling meta character ‘*’ near index 0等異常

近期甲方驗收項目,各種手段測試層出不窮,用*%&%&%&等特殊字元串在所有輸入的地方進行驗證,結果就會使頁面崩了或者抛出字元串異常,由于正則一直百度,并且所有頁面都需要修複感覺很惡心,諸多測試後終于找到适合我且可用的,貼上代碼記錄

關于頁面輸入字元串、轉義 java.util.regex.PatternSyntaxException Dangling meta character ‘*’ near index 0等異常
  • 自定義工具類對關鍵部位進行檢測
public static String PASSWORD_REGEX = "[\\S]{8,}";

    public static String PASSWORD_NUMBER_REGEX = ".*[\\d]+.*";

    public static String PASSWORD_CHARACTER_REGEX = ".*[a-zA-Z]+.*";

    public static String PASSWORD_SPECIAL_REGEX = ".*[^\\da-zA-Z\\s]+.*";

    public static String PASSWORD_CHAR_REGEX = "[`~!@#$%^&*()+=|{}':',\\\\[\\\\].<>/?~!@#¥%……& amp;*()——+|{}【】‘;:”“’。,、?|-]";

	//檢測中文字元和标點
            Pattern p = Pattern.compile("[\u4E00-\u9FA5|\\!|\\,|\\。|\\(|\\)|\\《|\\》|\\“|\\”|\\?|\\:|\\;|\\【|\\】]");
            Matcher m = p.matcher(password);
            if (m.find()) {
                flag = false;
            }

    /**
     * 驗證密碼是否符合格式
     * @param
     * @return
     */
    public static boolean passwordVerification(String password) {
        boolean flag = false;

        if (password.matches(PASSWORD_REGEX)) {
            int i = 0;
            if (password.matches(PASSWORD_NUMBER_REGEX)) {
                i++;
            }
            if (password.matches(PASSWORD_CHARACTER_REGEX)) {
                i++;
            }
            if (password.matches(PASSWORD_SPECIAL_REGEX)) {
                i++;
            }
            if (i > 1) {
                flag = true;
            }
            if(password.matches(PASSWORD_CHAR_REGEX)){
                flag = false;
            }
        }
        return flag;
    }
    public static boolean passwordChar(String password) {
        boolean flag = false;
        if(!password.matches(PASSWORD_CHAR_REGEX)){
            return true;
            }
        return flag;
    }

    /**
     * 驗證密碼是否<b>不</b>符合格式
     * @param
     * @return
     */
    public static boolean passwordNotVerification(String password) {
        return !passwordVerification(password);
    }


    public static String escapeExprSpecialWord(String password) {

        if (StringUtils.isNotBlank(password)) {
            String[] fbsArr = {"\\","&","$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|"};
            for (String key : fbsArr) {
                if (password.contains(key)) {
                    password = password.replace(key, "\\" + key);
                }
            }
        }
        return password;
    }
           

以上代碼還可以整合,太懶了也懶得搞了