正则表达式 → AppValidationMgr

来源:互联网 发布:大淘客联盟与淘宝联盟 编辑:程序博客网 时间:2024/06/04 01:33
  packagecom.jingewenku.abrahamcaijin.commonutil; import android.annotation.SuppressLint;   import java.io.*import java.text.SimpleDateFormatimport java.util.Calendarimport java.util.GregorianCalendarimport java.util.Hashtableimport java.util.UUIDimport java.util.regex.Pattern;     /** * 主要功能: 用于App验证数据验证 * * @Prject: CommonUtilLibrary * @Package: com.jingewenku.abrahamcaijin.commonutil * @author: AbrahamCaiJin * @date: 2017年05月03日 16:37 * @Copyright: 个人版权所有 * @Company: * @version: 1.0.0 */ @SuppressLint("SimpleDateFormat"@SuppressWarnings("rawtypes"public class AppValidationMgr {     //邮箱表达式 private final static Pattern email_pattern =Pattern.compile("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$");   //手机号表达式 private final static Pattern phone_pattern =Pattern.compile("^(13|15|18)\\d{9}$");   //银行卡号表达式 private final static Pattern bankNo_pattern =Pattern.compile("^[0-9]{16,19}$");   //座机号码表达式 private final static Pattern plane_pattern =Pattern.compile("^((\\(\\d{2,3}\\))|(\\d{3}\\-))?(\\(0\\d{2,3}\\)|0\\d{2,3}-)?[1-9]\\d{6,7}(\\-\\d{1,4})?$");   //非零表达式 private final static Pattern notZero_pattern =Pattern.compile("^\\+?[1-9][0-9]*$");   //数字表达式 private final static Pattern number_pattern =Pattern.compile("^[0-9]*$");   //大写字母表达式 private final static Pattern upChar_pattern =Pattern.compile("^[A-Z]+$");   //小写字母表达式 private final static Pattern lowChar_pattern =Pattern.compile("^[a-z]+$");   //大小写字母表达式 private final static Pattern letter_pattern =Pattern.compile("^[A-Za-z]+$");   //中文汉字表达式 private final static Pattern chinese_pattern =Pattern.compile("^[\u4e00-\u9fa5],{0,}$");   //条形码表达式 private final static Pattern onecode_pattern =Pattern.compile("^(([0-9])|([0-9])|([0-9]))\\d{10}$");   //邮政编码表达式 private final static Pattern postalcode_pattern = Pattern.compile("([0-9]{3})+.([0-9]{4})+");   //IP地址表达式 private final static Pattern ipaddress_pattern = Pattern.compile("[1-9](\\d{1,2})?\\.(0|([1-9](\\d{1,2})?))\\.(0|([1-9](\\d{1,2})?))\\.(0|([1-9](\\d{1,2})?))");   //URL地址表达式 private final static Pattern url_pattern =Pattern.compile("(https?://(w{3}\\.)?)?\\w+\\.\\w+(\\.[a-zA-Z]+)*(:\\d{1,5})?(/\\w*)*(\\??(.+=.*)?(&.+=.*)?)?");   //用户名表达式 private final static Pattern username_pattern =Pattern.compile("^[A-Za-z0-9_]{1}[A-Za-z0-9_.-]{3,31}");   //真实姓名表达式 private final static Pattern realnem_pattern =Pattern.compile("[\u4E00-\u9FA5]{2,5}(?:·[\u4E00-\u9FA5]{2,5})*");   //匹配HTML标签,通过下面的表达式可以匹配出HTML中的标签属性。 private final static Pattern html_patter =Pattern.compile("<\\\\/?\\\\w+((\\\\s+\\\\w+(\\\\s*=\\\\s*(?:\".*?\"|'.*?'|[\\\\^'\">\\\\s]+))?)+\\\\s*|\\\\s*)\\\\/?>");   //抽取注释,如果你需要移除HMTL中的注释,可以使用如下的表达式。 private final static Pattern notes_patter =Pattern.compile("<!--(.*?)-->");   //查找CSS属性,通过下面的表达式,可以搜索到相匹配的CSS属性。 private final static Pattern css_patter =Pattern.compile("^\\\\s*[a-zA-Z\\\\-]+\\\\s*[:]{1}\\\\s[a-zA-Z0-9\\\\s.#]+[;]{1}");   //提取页面超链接,提取html中的超链接。 private final static Pattern hyperlink_patter =Pattern.compile("(<a\\\\s*(?!.*\\\\brel=)[^>]*)(href=\"https?:\\\\/\\\\/)((?!(?:(?:www\\\\.)?'.implode('|(?:www\\\\.)?', $follow_list).'))[^\"]+)\"((?!.*\\\\brel=)[^>]*)(?:[^>]*)>");   //提取网页图片,假若你想提取网页中所有图片信息,可以利用下面的表达式。 private final static Pattern image_patter =Pattern.compile("\\\\< *[img][^\\\\\\\\>]*[src] *= *[\\\\\"\\\\']{0,1}([^\\\\\"\\\\'\\\\ >]*)");   //提取Color Hex Codes,有时需要抽取网页中的颜色代码,可以使用下面的表达式。 private final static Pattern color_patter =Pattern.compile("^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$");   //文件路径及扩展名校验,验证windows下文件路径和扩展名(下面的例子中为.txt文件) private final static Pattern route_patter =Pattern.compile("^([a-zA-Z]\\\\:|\\\\\\\\)\\\\\\\\([^\\\\\\\\]+\\\\\\\\)*[^\\\\/:*?\"<>|]+\\\\.txt(l)?$");   //提取URL链接,下面的这个表达式可以筛选出一段文本中的URL // ^(f|ht){1}(tp|tps):\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- ./?%&=]*)? //检查URL的前缀,应用开发中很多时候需要区分请求是HTTPS还是HTTP,通过下面的表达式可以取出一个url的前缀然后再逻辑判断。 //if (!s.match(/^[a-zA-Z]+:\\/\\//)) // { // s = 'http://' + s; // } //校验IP-v6地址 // (([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])) //校验IP-v4地址 // \\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b // 判断IE的版本 // ^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\/[5-9]\\.0).*$ // 校验金额 //^[0-9]+(.[0-9]{2})?$ // 校验密码强度 //^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$   /** * 验证是否为空串 (包括空格、制表符、回车符、换行符组成的字符串 若输入字符串为null或空字符串,返回true) * @param str 验证字符 * @return boolean  */ public static boolean isEmpty(String str) { if (str == null || "".equals(str)|| str.length()== 0) { return true; } for (int i= 0; i < str.length(); i++) { char c = str.charAt(i); if (c != '' && c != '\t'&& c != '\r'&& c != '\n') { return false; } } return true; }     /** * 是否不为空 * @param s */ public static boolean isNotEmpty(String s){ return s != null && !"".equals(s.trim()); }   /** * 验证非零正整数 * @param str 验证字符 * @return boolean  */ public static boolean isNotZero(String str) { return notZero_pattern.matcher(str).matches(); }     /** * 验证是数字 * @param str 验证字符 * @return boolean  */ public static boolean isNumber(String str) { return number_pattern.matcher(str).matches(); }     /** * 验证是大写字母 * @param str 验证字符 * @return boolean  */ public static boolean isUpChar(String str) { return upChar_pattern.matcher(str).matches(); }     /** * 验证是小写字母 * @param str 验证字符 * @return boolean  */ public static boolean isLowChar(String str) { return lowChar_pattern.matcher(str).matches(); }     /** * 验证是英文字母 * @param str 验证字符 * @return boolean  */ public static boolean isLetter(String str) { return letter_pattern.matcher(str).matches(); }     /** * 验证输入汉字 * @param str 验证字符 * @return boolean */ public static boolean isChinese(String str) { return chinese_pattern.matcher(str).matches(); }     /** * 验证真实姓名 * @param str 验证字符 * @return */ public static boolean isRealName(String str){ return realnem_pattern.matcher(str).matches(); }     /** * 验证是否是条形码 * @param oneCode 条形码 * @return boolean  */ public static boolean isOneCode(String oneCode) { return onecode_pattern.matcher(oneCode).matches(); }           /** * 验证邮箱是否正确 * @param email 邮箱地址 * @return boolean  */ public static boolean isEmail(String email) { return email_pattern.matcher(email).matches(); }       /** * 验证手机号是否正确 * @param phone 手机号码 * @return boolean  */ public static boolean isPhone(String phone) { return phone_pattern.matcher(phone).matches(); }     /** * 验证座机号码是否正确 * @param plane 座机号码 * @return boolean  */ public static boolean isPlane(String plane) { return plane_pattern.matcher(plane).matches(); }         /** * 验证邮政编码是否正确 * @param postalcode 邮政编码 * @return boolean  */ public static boolean isPostalCode(String postalcode) { return postalcode_pattern.matcher(postalcode).matches(); }     /** * 验证IP地址是否正确 * @param ipaddress IP地址 * @return boolean  */ public static boolean isIpAddress(String ipaddress){ return ipaddress_pattern.matcher(ipaddress).matches(); }       /** * 验证URL地址是否正确 * @param url 地址 * @return boolean  */ public static boolean isURL(String url){ return url_pattern.matcher(url).matches(); }         /** * 验证是否是正整数 * @param str 验证字符 * @return boolean */ public static boolean isInteger(String str){ tryInteger.valueOf(str); return true; }catch(Exception e){ return false; } }     /** * 验证是否是小数 * @param paramString 验证字符 * @return boolean  */ public static boolean isPoint(String paramString){ if(paramString.indexOf(".")> 0){ if(paramString.substring(paramString.indexOf(".")).length()> 3){ return false; } } return true; }     /** * 验证是否银行卡号 * @param bankNo 银行卡号 * @return */ public static boolean isBankNo(String bankNo){ //替换空格 bankNo = bankNo.replaceAll("", ""); //银行卡号可为12位数字 if(12== bankNo.length()){ return true; } //银行卡号可为16-19位数字 return bankNo_pattern.matcher(bankNo).matches(); }   /** * 验证身份证号码是否正确 * @param IDCardNo 身份证号码  * @return boolean  */ public static boolean isIDCard(String IDCardNo) { //记录错误信息 String errmsg = ""String[] ValCodeArr = { "1","0","x","9","8","7","6","5","4","3","2" }; String[] Wi = { "7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2" }; String Ai= "";   //================ 身份证号码的长度 15位或18位 ================ if (IDCardNo.length()!= 15 && IDCardNo.length() != 18) { errmsg = "身份证号码长度应该为15位或18位!"AppLogMessageMgr.e("AppValidationMgr-->>isIDCard", errmsg); return false; }   //================ 数字 除最后以为都为数字 ================ if (IDCardNo.length()== 18) { Ai = IDCardNo.substring(0,17); } else if (IDCardNo.length()== 15) { Ai = IDCardNo.substring(0,6) + "19"+ IDCardNo.substring(6,15); } if (isNumber(Ai)== false) { errmsg = "身份证15位号码都应为数字 ; 18位号码除最后一位外,都应为数字"AppLogMessageMgr.e("AppValidationMgr-->>isIDCard", errmsg); return false; }   //================ 出生年月是否有效 ================ //年份 String strYear = Ai.substring(6,10); //月份 String strMonth = Ai.substring(10,12); // String strDay = Ai.substring(12,14); if (AppSysDateMgr.getDateIsTrue(strYear, strMonth, strDay)== false) { errmsg = "身份证生日无效"AppLogMessageMgr.e("AppValidationMgr-->>isIDCard", errmsg); return false; } GregorianCalendar gc = new GregorianCalendar(); SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd"); tryif ((gc.get(Calendar.YEAR)- Integer.parseInt(strYear))> 150 || (gc.getTime().getTime()- s.parse(strYear+ "-"+ strMonth + "-"+ strDay).getTime())< 0) { errmsg = "身份证生日不在有效范围"AppLogMessageMgr.e("AppValidationMgr-->>isIDCard", errmsg); return false; } } catch (NumberFormatException e) { e.printStackTrace(); errmsg = "身份证生日不在有效范围"AppLogMessageMgr.e("AppValidationMgr-->>isIDCard", errmsg + e.getMessage()); return false; } catch (java.text.ParseException e1) { e1.printStackTrace(); errmsg = "身份证生日不在有效范围"AppLogMessageMgr.e("AppValidationMgr-->>isIDCard", errmsg + e1.getMessage()); return false; } if (Integer.parseInt(strMonth)> 12 || Integer.parseInt(strMonth)== 0) { errmsg = "身份证月份无效"AppLogMessageMgr.e("AppValidationMgr-->>isIDCard", errmsg); return false; } if (Integer.parseInt(strDay)> 31 || Integer.parseInt(strDay)== 0) { errmsg = "身份证日期无效"AppLogMessageMgr.e("AppValidationMgr-->>isIDCard", errmsg); return false; }   //================ 地区码时候有效 ================ Hashtable hashtable = AppInfoMgr.getAreaCodeAll(); if (hashtable.get(Ai.substring(0,2)) == null) { errmsg = "身份证地区编码错误"AppLogMessageMgr.e("AppValidationMgr-->>isIDCard", errmsg); return false; }   //================ 判断最后一位的值 ================ int TotalmulAiWi = 0for (int i= 0; i < 17; i++) { TotalmulAiWi = TotalmulAiWi+Integer.parseInt(String.valueOf(Ai.charAt(i)))* Integer.parseInt(Wi[i]); } int modValue = TotalmulAiWi % 11String strVerifyCode = ValCodeArr[modValue]; Ai = Ai + strVerifyCode; if (IDCardNo.length()== 18) { if (Ai.equals(IDCardNo)== false) { errmsg = "身份证无效,不是合法的身份证号码"AppLogMessageMgr.e("AppValidationMgr-->>isIDCard", errmsg); return false; } } elsereturn true; } return true; }     /** * 判断是否有特殊字符 * @param str 验证字符 * @return boolean  */ public static boolean isPeculiarStr(String str){ boolean flag = falseString regEx = "[^0-9a-zA-Z\u4e00-\u9fa5]+"if(str.length()!= (str.replaceAll(regEx,"").length())) { flag = true; } return flag; }     /** * 判断是否为用户名账号(规则如下:用户名由下划线或字母开头,由数字、字母、下划线、点、减号组成的4-32位字符) * @param username 用户名  * @return boolean  */ public static boolean isUserName(String username) { return username_pattern.matcher(username).matches(); }   /** * 获取字符串中文字符的长度(每个中文算2个字符). * * @param str * 指定的字符串 * @return 中文字符的长度 */ public static int chineseLength(String str) { int valueLength = 0String chinese = "[\u0391-\uFFE5]"/* 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1*/ if (!isEmpty(str)) { for (int i= 0; i < str.length(); i++) { /* 获取一个字符*/ String temp = str.substring(i, i+ 1); /* 判断是否为中文字符*/ if (temp.matches(chinese)) { valueLength += 2; } } } return valueLength; }   /** * 描述:获取字符串的长度. * * @param str * 指定的字符串 * @return 字符串的长度(中文字符计2个) */ public static int strLength(String str) { int valueLength = 0String chinese = "[\u0391-\uFFE5]"if (!isEmpty(str)) { // 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1 for (int i= 0; i < str.length(); i++) { // 获取一个字符 String temp = str.substring(i, i+ 1); // 判断是否为中文字符 if (temp.matches(chinese)) { // 中文字符长度为2 valueLength += 2; } else// 其他字符长度为1 valueLength += 1; } } } return valueLength; }   /** * 描述:获取指定长度的字符所在位置. * * @param str * 指定的字符串 * @param maxL * 要取到的长度(字符长度,中文字符计2个) * @return 字符的所在位置 */ public static int subStringLength(String str, int maxL) { int currentIndex = 0int valueLength = 0String chinese = "[\u0391-\uFFE5]"// 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1 for (int i= 0; i < str.length(); i++) { // 获取一个字符 String temp = str.substring(i, i+ 1); // 判断是否为中文字符 if (temp.matches(chinese)) { // 中文字符长度为2 valueLength += 2; } else// 其他字符长度为1 valueLength += 1; } if (valueLength >= maxL) { currentIndex = i; break; } } return currentIndex; }   /** * 描述:是否只是字母和数字. * * @param str * 指定的字符串 * @return 是否只是字母和数字:是为true,否则false */ public static Boolean isNumberLetter(String str) { Boolean isNoLetter = falseString expr = "^[A-Za-z0-9]+$"if (str.matches(expr)) { isNoLetter = true; } return isNoLetter; }   /** * 描述:是否包含中文. * * @param str * 指定的字符串 * @return 是否包含中文:是为true,否则false */ public static Boolean isContainChinese(String str) { Boolean isChinese = falseString chinese = "[\u0391-\uFFE5]"if (!isEmpty(str)) { // 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1 for (int i= 0; i < str.length(); i++) { // 获取一个字符 String temp = str.substring(i, i+ 1); // 判断是否为中文字符 if (temp.matches(chinese)) { isChinese = true; } else {   } } } return isChinese; }   /** * 描述:从输入流中获得String. * * @param is * 输入流 * @return 获得的String */ public static String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = nulltrywhile ((line = reader.readLine())!= null) { sb.append(line + "\n"); }   // 最后一个\n删除 if (sb.indexOf("\n")!= -1 && sb.lastIndexOf("\n")== sb.length()- 1) { sb.delete(sb.lastIndexOf("\n"), sb.lastIndexOf("\n")+ 1); }   } catch (IOException e) { e.printStackTrace(); } finallytry { is.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); }   /** * 描述:截取字符串到指定字节长度. * * @param str * the str * @param length * 指定字节长度 * @return 截取后的字符串 */ public static String cutString(String str, int length) { return cutString(str, length,""); }   /** * 描述:截取字符串到指定字节长度. * * @param str * 文本 * @param length * 字节长度 * @param dot * 省略符号 * @return 截取后的字符串 */ public static String cutString(String str, int length, String dot) { int strBLen = strlen(str, "GBK"); if (strBLen <= length) { return str; } int temp = 0StringBuffer sb = new StringBuffer(length); char[] ch = str.toCharArray(); for (char c: ch) { sb.append(c); if (c > 256) { temp += 2; } else { temp += 1; } if (temp >= length) { if (dot != null) { sb.append(dot); } break; } } return sb.toString(); }   /** * 描述:截取字符串从第一个指定字符. * * @param str1 * 原文本 * @param str2 * 指定字符 * @param offset * 偏移的索引 * @return 截取后的字符串 */ public static String cutStringFromChar(String str1, String str2, int offset) { if (isEmpty(str1)) { return ""; } int start = str1.indexOf(str2); if (start != -1) { if (str1.length()> start + offset) { return str1.substring(start+ offset); } } return ""; }   /** * 描述:获取字节长度. * * @param str * 文本 * @param charset * 字符集(GBK) * @return the int */ public static int strlen(String str, String charset) { if (str == null || str.length() == 0) { return 0; } int length = 0try { length = str.getBytes(charset).length; } catch (Exception e) { e.printStackTrace(); } return length; }   /** * 获取大小的描述. * * @param size * 字节个数 * @return 大小的描述 */ public static String getSizeDesc(long size) { String suffix = "B"if (size >= 1024) { suffix = "K"; size = size >> 10if (size >= 1024) { suffix = "M"// size /= 1024; size = size >> 10if (size >= 1024) { suffix = "G"; size = size >> 10// size /= 1024; } } } return size + suffix; }   /** * 描述:ip地址转换为10进制数. * * @param ip * the ip * @return the long */ public static long ip2int(String ip) { ip = ip.replace(".",","); String[] items = ip.split(","); return Long.valueOf(items[0])<< 24 | Long.valueOf(items[1])<< 16 | Long.valueOf(items[2])<< 8 | Long.valueOf(items[3]); }   /** * 获取UUID * * @return 32UUID小写字符串 */ public static String gainUUID() { String strUUID = UUID.randomUUID().toString(); strUUID = strUUID.replaceAll("-","").toLowerCase(); return strUUID; }     /** * 手机号码,中间4位星号替换 * * @param phone 手机号 * @return 星号替换的手机号 */ public static String phoneNoHide(String phone) { // 括号表示组,被替换的部分$n表示第n组的内容 // 正则表达式中,替换字符串,括号的意思是分组,在replace()方法中, // 参数二中可以使用$n(n为数字)来依次引用模式串中用括号定义的字串。 // "(\d{3})\d{4}(\d{4})", "$1****$2"的这个意思就是用括号, // 分为(前3个数字)中间4个数字(最后4个数字)替换为(第一组数值,保持不变$1)(中间为*)(第二组数值,保持不变$2) return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2"); }   /** * 银行卡号,保留最后4位,其他星号替换 * * @param cardId 卡号 * @return 星号替换的银行卡号 */ public static String cardIdHide(String cardId) { return cardId.replaceAll("\\d{15}(\\d{3})","**** **** **** **** $1"); }   /** * 身份证号,中间10位星号替换 * * @param id 身份证号 * @return 星号替换的身份证号 */ public static String idHide(String id) { return id.replaceAll("(\\d{4})\\d{10}(\\d{4})","$1** **** ****$2"); }   /** * 是否为车牌号(沪A88888) * * @param vehicleNo 车牌号 * @return 是否为车牌号 */   public static boolean checkVehicleNo(String vehicleNo) { Pattern pattern = Pattern.compile("^[\u4e00-\u9fa5]{1}[a-zA-Z]{1}[a-zA-Z_0-9]{5}$"); return pattern.matcher(vehicleNo).find();   }   // /** // * 匹配中国邮政编码 // * // * @param postcode 邮政编码 // * @return 验证成功返回true,验证失败返回false // */ // public static boolean checkPostcode(String postcode) { // String regex = "[1-9]\\d{5}"; // return Pattern.matches(regex, postcode); // }       }  
原创粉丝点击