史上最全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)

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM