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