package simple.base.utils.validate; import java.util.regex.Matcher; import java.util.regex.Pattern; import simple.base.utils.IdCardSimple; /** * 校驗類公共方法 * * @author __ 2014-1-15 */ public class ValidateSimple { /********************************* 經常使用正則表達式代碼 ********************/ /** * 經常使用正則表達式代碼提供 驗證數字:^[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]*$ 驗證非負整數(正整數 + 0) ^\d+$ * 驗證非正整數(負整數 + 0) ^((-\d+)|(0+))$ 驗證長度爲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\uF900-\uFA2D]+$ * 驗證Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ * 驗證InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ * ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$ * 驗證手機號碼:^(\(\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)$ * 正確格式爲:0一、09和一、31。 整數:^-?\d+$ 非負浮點數(正浮點數 + 0):^\d+(\.\d+)?$ 正浮點數 * ^(([0-9]+\ * .[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ * 非正浮點數(負浮點數 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 負浮點數 * ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ 浮點數 * ^(-?\d+)(\.\d+)?$ */ /** * /** 功能:校驗是否爲手機號碼 * * @param Mobile * 手機號碼 * @return boolean 校驗結果 */ public static boolean checkMobile(String Mobile) { String regExp = "^(1[3|5|8][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])$"; Pattern p = Pattern.compile(regExp); Matcher m = p.matcher(Mobile); return m.find();// boolean } /** * 功能:判斷字符串是否爲日期格式 * * @param strDate * 須要校驗的字符串 * @return boolean 校驗結果 */ public static boolean checkDate(String strDate) { Pattern pattern = Pattern .compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$"); Matcher m = pattern.matcher(strDate); if (m.matches()) { return true; } else { return false; } } /** * 功能:身份證校驗 * * @param str * 須要校驗的字符串 * @return boolean 校驗結果 */ public static boolean checkIDCard(String str) { return IdCardSimple.getInstance().verify(str); } /** * 功能:驗證郵箱地址是否正確 * * @param email * 須要校驗的字符串 * @return boolean 校驗結果 */ public static boolean checkEmail(String email) { boolean flag = false; try { String check = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$"; Pattern regex = Pattern.compile(check); Matcher matcher = regex.matcher(email); flag = matcher.matches(); } catch (Exception e) { flag = false; } return flag; } /** * 功能:驗證是否全爲中文 * * @param str * 須要校驗的字符串 * @return boolean 校驗結果 */ public static boolean checkChinese(String str) { boolean result = true; for (int i = 0; i < str.length(); i++) { String temp = str.substring(i, i + 1); boolean tempRes = java.util.regex.Pattern.matches("[\u4E00-\u9FA5]", temp); if (!tempRes) { result = false; break; } } return result; } /** * 功能:驗證對象是否爲null * * @param obj * 須要校驗的對象 * @return boolean 校驗結果 */ public static boolean checkIsNull(Object obj) { return obj == null; } /** * 判斷是否全爲數字 * @param inputStr * @return */ public static boolean isAllNumeric(String inputStr){ return inputStr==null?false: inputStr.matches("\\d+"); } /** * 判斷是否全爲字母 * @param inputStr * @return */ public static boolean isAllLetter(String inputStr){ return inputStr==null?false: inputStr.matches("[A-Za-z]+"); } /** * 正則表達式判斷字符串是否全是中文漢字 * * @param strInput * @return */ public static boolean isAllChinese(String strInput) { if (strInput != null && !strInput.trim().equalsIgnoreCase("")) { // 此正則表達式用來判斷是否爲中文(\\u4E00-\\u9FA5\\uF900-\\uFA2D是指漢字的Unicode編碼範圍 ) Pattern pattern = Pattern.compile("[\u4E00-\u9FA5\uF900-\uFA2D]+"); Matcher matcher = pattern.matcher(strInput); if (matcher.matches()) { return true; } else { return false; } } else { return false; } } /** * 正則表達式判斷字符串是否含有中文漢字 * * @param strInput * @return */ public static boolean isHaveChinese(String strInput) { if (strInput != null && !strInput.trim().equalsIgnoreCase("")) { for (int i = 0; i < strInput.length(); i++) { char ss = strInput.charAt(i); boolean s = String.valueOf(ss).matches("[\u4E00-\u9FA5\uF900-\uFA2D]"); if (s) { return true; } } return false; } else { return false; } } /** * 正則表達式判斷字符串是否知足中文、大小寫字母、數字、下劃線和長度限制 * * @param strInput * 字符串 * @param intMax * 字符串的設定長度 * @return */ public static boolean isStringOK(String strInput, int intMax) { /** 此正則表達式將上面兩者結合起來進行判斷,中文、大小寫字母和數字,{2,10}字符的長度爲2-10 **/ if (strInput != null && !strInput.trim().equalsIgnoreCase("")) { String Regular = "^[\\u4E00-\\u9FA5\\uF900-\\uFA2D\\w]{2," + intMax + "}$"; Pattern pattern = Pattern.compile(Regular, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(strInput); if (matcher.matches()) { return true; } else { return false; } } else { return false; } } }