史上最全Java表單驗證封裝類
阿新 • • 發佈:2019-02-07
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-./?%&=]*)?$}