史上最全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("416501600@qq.com"));
        //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="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:」「’。,、?]";  
        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-./?%&=]*)?$
}

---------------------------------------------------------------------------------
Blog:http://www.cnblogs.com/linjiqin/
Hadoop交流羣(250363249)、Java+Oracle交流羣(158560018)html

題外話:
本人來自鐵觀音的發源地——泉州安溪,有須要正宗安溪鐵觀音的友友歡迎Q我:416501600。java

相關文章
相關標籤/搜索