1. 程式人生 > >史上最全Java表單驗證封裝類

史上最全Java表單驗證封裝類

package com.tongrong.utils;import java.util.Collection;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.apache.commons.lang.StringUtils;/** * Java表單驗證工具類 *  * @author jiqinlin *  */@SuppressWarnings("unchecked")public class RegexUtil {    public static void main(String[] args) {//        System.out.println("過濾中英文特殊字元: "+RegexUtil.stringFilter("中國~~!#$%%."));//        System.out.println("是否包含中英文特殊字元: "+RegexUtil.isContainsSpecialChar("12"));//        System.out.println("過濾html程式碼: "+RegexUtil.htmltoText("<JAVASCRIPT>12</JAVASCRIPT>DDDDD"));//        System.out.println("判斷中文字元: "+RegexUtil.isChineseChar("中國!"));        System.out.println("匹配漢字: "+RegexUtil.isChinese("中國!"));//        System.out.println("判斷英文字元: "+RegexUtil.isEnglish("abc!"));//        System.out.println("判斷合法字元: "+RegexUtil.isRightfulString("abc_-11AAA"));//        System.out.println("郵政編碼驗證: "+RegexUtil.isZipCode("162406"));//        System.out.println("身份證號碼驗證: "+RegexUtil.isIdCardNo("35052419880210133e"));//        System.out.println("手機號碼驗證: "+RegexUtil.isMobile("18918611111"));//        System.out.println("電話號碼驗證: "+RegexUtil.isPhone("8889333"));//        System.out.println("電話號碼驗證: "+RegexUtil.isNumeric("888.9333"));//        System.out.println("匹配密碼: "+RegexUtil.isPwd("d888d_ddddd"));//        System.out.println("匹配密碼: "+RegexUtil.isUrl("http://baidu.com"));        System.out.println("驗證字元: "+RegexUtil.stringCheck("中文aabc001_-"));//        System.out.println(isEmail("[email protected]"));        //http://baidu.com www.baidu.com baidu.com//        System.out.println(NumberUtils.toInt("-0000000002"));    }    public final static boolean isNull(Object[] objs){        if(objs==null||objs.length==0) return true;        return false;    }    public final static boolean isNull(Integer integer){        if(integer==null||integer==0) return true;        return false;    }    public final static boolean isNull(Collection collection){        if(collection==null||collection.size()==0) return true;        return false;    }    public final static boolean isNull(Map map){        if(map==null||map.size()==0) return true;        return false;    }    public final static boolean isNull(String str){        return str == null || "".equals(str.trim()) || "null".equals(str.toLowerCase());    }    public final static boolean isNull(Long longs){        if(longs==null||longs==0) return true;        return false;    }    public final static boolean isNotNull(Long longs){        return !isNull(longs);    }    public final static boolean isNotNull(String str){        return !isNull(str);    }    public final static boolean isNotNull(Collection collection){        return !isNull(collection);    }    public final static boolean isNotNull(Map map){        return !isNull(map);    }    public final static boolean isNotNull(Integer integer){        return !isNull(integer);    }    public final static boolean isNotNull(Object[] objs){        return !isNull(objs);    }    /**     * 匹配URL地址     *      * @param str     * @return     * @author jiqinlin     */    public final static boolean isUrl(String str) {        return match(str, "^http://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$");    }    /**     * 匹配密碼,以字母開頭,長度在6-12之間,只能包含字元、數字和下劃線。     *      * @param str     * @return     * @author jiqinlin     */    public final static boolean isPwd(String str) {        return match(str, "^[a-zA-Z]\\w{6,12}$");    }    /**     * 驗證字元,只能包含中文、英文、數字、下劃線等字元。     *      * @param str     * @return     * @author jiqinlin     */    public final static boolean stringCheck(String str) {        return match(str, "^[a-zA-Z0-9\u4e00-\u9fa5-_]+$");    }    /**     * 匹配Email地址     *      * @param str     * @return     * @author jiqinlin     */    public final static boolean isEmail(String str) {        return match(str, "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$");    }    /**     * 匹配非負整數(正整數+0)     *      * @param str     * @return     * @author jiqinlin     */    public final static boolean isInteger(String str) {        return match(str, "^[+]?\\d+$");    }    /**     * 判斷數值型別,包括整數和浮點數     *      * @param str     * @return     * @author jiqinlin     */    public final static boolean isNumeric(String str) {         if(isFloat(str) || isInteger(str)) return true;        return false;    }    /**     * 只能輸入數字     *      * @param str     * @return     * @author jiqinlin     */    public final static boolean isDigits(String str) {        return match(str, "^[0-9]*$");    }    /**     * 匹配正浮點數     *      * @param str     * @return     * @author jiqinlin     */    public final static boolean isFloat(String str) {        return match(str, "^[-\\+]?\\d+(\\.\\d+)?$");    }    /**     * 聯絡電話(手機/電話皆可)驗證        *      * @param text     * @return     * @author jiqinlin     */    public final static boolean isTel(String text){        if(isMobile(text)||isPhone(text)) return true;        return false;    }    /**     * 電話號碼驗證       *      * @param text     * @return     * @author jiqinlin     */    public final static boolean isPhone(String text){        return match(text, "^(\\d{3,4}-?)?\\d{7,9}$");    }    /**     * 手機號碼驗證        *      * @param text     * @return     * @author jiqinlin     */    public final static boolean isMobile(String text){        if(text.length()!=11) return false;        return match(text, "^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\\d{8})$");    }    /**     * 身份證號碼驗證      *      * @param text     * @return     * @author jiqinlin     */    public final static boolean isIdCardNo(String text){        return match(text, "^(\\d{6})()?(\\d{4})(\\d{2})(\\d{2})(\\d{3})(\\w)$");    }    /**     * 郵政編碼驗證      *      * @param text     * @return     * @author jiqinlin     */    public final static boolean isZipCode(String text){        return match(text, "^[0-9]{6}$");    }    /**     * 判斷整數num是否等於0     *      * @param num     * @return     * @author jiqinlin     */    public final static boolean isIntEqZero(int num){          return num==0;    }    /**     * 判斷整數num是否大於0     *      * @param num     * @return     * @author jiqinlin     */    public final static boolean isIntGtZero(int num){          return num>0;    }    /**     * 判斷整數num是否大於或等於0     *      * @param num     * @return     * @author jiqinlin     */    public final static boolean isIntGteZero(int num){         return num>=0;    }    /**     * 判斷浮點數num是否等於0     *      * @param num 浮點數     * @return     * @author jiqinlin     */    public final static boolean isFloatEqZero(float num){          return num==0f;    }    /**     * 判斷浮點數num是否大於0     *      * @param num 浮點數     * @return     * @author jiqinlin     */    public final static boolean isFloatGtZero(float num){          return num>0f;    }    /**     * 判斷浮點數num是否大於或等於0     *      * @param num 浮點數     * @return     * @author jiqinlin     */    public final static boolean isFloatGteZero(float num){         return num>=0f;    }    /**     * 判斷是否為合法字元(a-zA-Z0-9-_)     *      * @param text     * @return     * @author jiqinlin     */    public final static boolean isRightfulString(String text){        return match(text, "^[A-Za-z0-9_-]+$");     }    /**     * 判斷英文字元(a-zA-Z)     *      * @param text     * @return     * @author jiqinlin     */    public final static boolean isEnglish(String text){        return match(text, "^[A-Za-z]+$");     }    /**     * 判斷中文字元(包括漢字和符號)     *      * @param text     * @return     * @author jiqinlin     */    public final static boolean isChineseChar(String text){        return match(text, "^[\u0391-\uFFE5]+$");    }    /**     * 匹配漢字     *      * @param text     * @return     * @author jiqinlin     */    public final static boolean isChinese(String text){        return match(text, "^[\u4e00-\u9fa5]+$");    }    /**     * 是否包含中英文特殊字元,除英文"-_"字元外     *      * @param str     * @return     */    public static boolean isContainsSpecialChar(String text) {        if(StringUtils.isBlank(text)) return false;        String[] chars={"[","`","~","!","@","#","$","%","^","&","*","(",")","+","=","|","{","}","'",                ":",";","'",",","[","]",".","<",">","/","?","~","!","@","#","¥","%","…","&","*","(",")",                "—","+","|","{","}","【","】","‘",";",":","”","“","’","。",",","、","?","]"};        for(String ch : chars){            if(text.contains(ch)) return true;        }        return false;    }    /**     * 過濾中英文特殊字元,除英文"-_"字元外     *      * @param text     * @return     */    public static String stringFilter(String text) {        String regExpr="[`
[email protected]
#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";          Pattern p = Pattern.compile(regExpr);        Matcher m = p.matcher(text);        return m.replaceAll("").trim();         }    /**     * 過濾html程式碼     *      * @param inputString 含html標籤的字串     * @return     */    public static String htmlFilter(String inputString) {        String htmlStr = inputString; // 含html標籤的字串        String textStr = "";        java.util.regex.Pattern p_script;        java.util.regex.Matcher m_script;        java.util.regex.Pattern p_style;        java.util.regex.Matcher m_style;        java.util.regex.Pattern p_html;        java.util.regex.Matcher m_html;        java.util.regex.Pattern p_ba;        java.util.regex.Matcher m_ba;        try {            String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>"; // 定義script的正則表示式{或<script[^>]*?>[\\s\\S]*?<\\/script>            // }            String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>"; // 定義style的正則表示式{或<style[^>]*?>[\\s\\S]*?<\\/style>            // }            String regEx_html = "<[^>]+>"; // 定義HTML標籤的正則表示式            String patternStr = "\\s+";            p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);            m_script = p_script.matcher(htmlStr);            htmlStr = m_script.replaceAll(""); // 過濾script標籤            p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);            m_style = p_style.matcher(htmlStr);            htmlStr = m_style.replaceAll(""); // 過濾style標籤            p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);            m_html = p_html.matcher(htmlStr);            htmlStr = m_html.replaceAll(""); // 過濾html標籤            p_ba = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);            m_ba = p_ba.matcher(htmlStr);            htmlStr = m_ba.replaceAll(""); // 過濾空格            textStr = htmlStr;        } catch (Exception e) {            System.err.println("Html2Text: " + e.getMessage());        }        return textStr;// 返回文字字串    }    /**     * 正則表示式匹配     *      * @param text 待匹配的文字     * @param reg 正則表示式     * @return     * @author jiqinlin     */    private final static boolean match(String text, String reg) {        if (StringUtils.isBlank(text) || StringUtils.isBlank(reg))            return false;        return Pattern.compile(reg).matcher(text).matches();    }// 參考地址:http://www.cnblogs.com/yansheng/archive/2010/05/07/1730188.html    // 附 : 常用的正則表示式://    匹配特定數字://    ^[1-9]d*$    //匹配正整數//    ^-[1-9]d*$   //匹配負整數//    ^-?[1-9]d*$   //匹配整數//    ^[1-9]d*|0$  //匹配非負整數(正整數 + 0)//    ^-[1-9]d*|0$   //匹配非正整數(負整數 + 0)//    ^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮點數//    ^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配負浮點數//    ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮點數//    ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非負浮點數(正浮點數 + 0)//    ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮點數(負浮點數 + 0)//    評註:處理大量資料時有用,具體應用時注意修正////    匹配特定字串://    ^[A-Za-z]+$  //匹配由26個英文字母組成的字串//    ^[A-Z]+$  //匹配由26個英文字母的大寫組成的字串//    ^[a-z]+$  //匹配由26個英文字母的小寫組成的字串//    ^[A-Za-z0-9]+$  //匹配由數字和26個英文字母組成的字串//    ^w+$  //匹配由數字、26個英文字母或者下劃線組成的字串////    在使用RegularExpressionValidator驗證控制元件時的驗證功能及其驗證表示式介紹如下:////    只能輸入數字:“^[0-9]*$”//    只能輸入n位的數字:“^d{n}$”//    只能輸入至少n位數字:“^d{n,}$”//    只能輸入m-n位的數字:“^d{m,n}$”//    只能輸入零和非零開頭的數字:“^(0|[1-9][0-9]*)$”//    只能輸入有兩位小數的正實數:“^[0-9]+(.[0-9]{2})?$”//    只能輸入有1-3位小數的正實數:“^[0-9]+(.[0-9]{1,3})?$”//    只能輸入非零的正整數:“^+?[1-9][0-9]*$”//    只能輸入非零的負整數:“^-[1-9][0-9]*$”//    只能輸入長度為3的字元:“^.{3}$”//    只能輸入由26個英文字母組成的字串:“^[A-Za-z]+$”//    只能輸入由26個大寫英文字母組成的字串:“^[A-Z]+$”//    只能輸入由26個小寫英文字母組成的字串:“^[a-z]+$”//    只能輸入由數字和26個英文字母組成的字串:“^[A-Za-z0-9]+$”//    只能輸入由數字、26個英文字母或者下劃線組成的字串:“^w+$”//    驗證使用者密碼:“^[a-zA-Z]\\w{5,17}$”正確格式為:以字母開頭,長度在6-18之間,////    只能包含字元、數字和下劃線。//    驗證是否含有^%&’,;=?$”等字元:“[^%&’,;=?$x22]+”//    只能輸入漢字:“^[u4e00-u9fa5],{0,}$”//    驗證Email地址:“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$”//    驗證InternetURL:“^http://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$”//    驗證電話號碼:“^((d{3,4})|d{3,4}-)?d{7,8}$”////    正確格式為:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”,////    “XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”。//    驗證身份證號(15位或18位數字):“^d{15}|d{}18$”//    驗證一年的12個月:“^(0?[1-9]|1[0-2])$”正確格式為:“01”-“09”和“1”“12”//    驗證一個月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$” 正確格式為:“01”“09”和“1”“31”。////    匹配中文字元的正則表示式: [u4e00-u9fa5]//    匹配雙位元組字元(包括漢字在內):[^x00-xff]//    匹配空行的正則表示式:n[s| ]*r//    匹配HTML標記的正則表示式:/< (.*)>.*|< (.*) />///    匹配首尾空格的正則表示式:(^s*)|(s*$)//    匹配Email地址的正則表示式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*//    匹配網址URL的正則表示式:^http://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$}