`
wangdei
  • 浏览: 366200 次
社区版块
存档分类
最新评论

Regex的一些常用例子

阅读更多
  1. import java.util.HashMap;
  2. import java.util.Map;
  3. import java.util.regex.Pattern;
  4. /**应用于http://www.bt285.cn BT下载 */
  5. public class RegexUtils {
  6.     private static Pattern PATTERN_EMAIL = Pattern
  7.             .compile("^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$");// 邮件地址
  8.     private static Pattern PATTERN_TEL = Pattern
  9.             .compile("^([0-9]{3,4}-)?[0-9]{7,8}$");// 固定电话
  10.     private static Pattern PATTERN_MOBILE = Pattern
  11.             .compile("^(\\+86)?0?1[3|5]\\d{9}$");// 移动电话
  12.     private static Pattern PATTERN_ALPHA = Pattern.compile("^[A-Za-z]+$");// 字母
  13.     private static Pattern PATTERN_DIGITAL = Pattern.compile("^\\d+$");// 数字
  14.     private static Pattern PATTERN_CHINESE = Pattern
  15.             .compile("^[\\u4E00-\\u9FA5]+$");// 中文
  16.     private static Pattern PATTERN_IDCARD_15 = Pattern
  17.             .compile("^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$");// 15位身份证格式
  18.     private static Pattern PATTERN_IDCARD_18 = Pattern
  19.             .compile("^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}[\\d|x|X]$");// 18位身份证格式
  20.     private static Pattern PATTERN_IP = Pattern
  21.             .compile("^((00\\d|1?\\d?\\d|(2([0-4]\\d|5[0-5])))\\.){3}(00\\d|1?\\d?\\d|(2([0-4]\\d|5[0-5])))$");//IP格式
  22.     private static Pattern PATTERN_TIME = Pattern
  23.             .compile("((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])(\\:([0-5]?[0-9]))");//时间格式
  24.     private static Pattern PATTERN_REPEAT = Pattern.compile(".*(.).*\\1.*");//重复字符格式
  25.     public RegexUtils() {
  26.     }
  27.     /**
  28.      * 校验email格式
  29.      * 
  30.      * @param email
  31.      *            email
  32.      * @return
  33.      */
  34.     public static boolean isEmail(String email) {
  35.         if (email == null)
  36.             return false;
  37.         else
  38.             return PATTERN_EMAIL.matcher(email).matches();
  39.     }
  40.     public static boolean isTelephone(String telephone) {
  41.         if (telephone == null)
  42.             return false;
  43.         else
  44.             return PATTERN_TEL.matcher(telephone).matches();
  45.     }
  46.     public static boolean isMobile(String mobile) {
  47.         if (mobile == null)
  48.             return false;
  49.         else
  50.             return PATTERN_MOBILE.matcher(mobile).matches();
  51.     }
  52.     public static boolean isAlpha(String alpha) {
  53.         if (alpha == null)
  54.             return false;
  55.         else
  56.             return PATTERN_ALPHA.matcher(alpha).matches();
  57.     }
  58.     public static boolean isDigital(String digital) {
  59.         if (digital == null)
  60.             return false;
  61.         else
  62.             return PATTERN_DIGITAL.matcher(digital).matches();
  63.     }
  64.     public static boolean isChinese(String chinese) {
  65.         if (chinese == null)
  66.             return false;
  67.         else
  68.             return PATTERN_CHINESE.matcher(chinese).matches();
  69.     }
  70.     public static boolean isDateTime(String dateTime) {
  71.         return isDateTime(dateTime, "-");
  72.     }
  73.     /**
  74.      * 校验日期时间 月 日 时间 可以不写前面的0 ,例如 2008-9-2 3:9:1
  75.      * 
  76.      * @param dateTime
  77.      * @param partition
  78.      *            分隔符 这里只支持 \、/、-、空格 四类分隔符,如果是长度大于1,则取第一个字符作为分隔符
  79.      * @return 如何符合格式,返回true
  80.      */
  81.     public static boolean isDateTime(String dateTime, String partition) {
  82.         if (dateTime == null || partition == null || "".equals(partition))
  83.             return false;
  84.         String s = "";
  85.         char split = partition.charAt(0);
  86.         if (split != '\\' && split != '/' && split != '-' && split != ' ')
  87.             throw new IllegalArgumentException((new StringBuilder(
  88.                     "partition can not start with '")).append(partition)
  89.                     .append("'!").toString());
  90.         s = (new StringBuilder(String.valueOf(s))).append(split).toString();
  91.         StringBuilder part = new StringBuilder(
  92.                 "^((\\d{2}(([02468][048])|([13579][26]))");
  93.         part.append(s);
  94.         part.append("((((0?[13578]");
  95.         part.append(")|(1[02]))");
  96.         part.append(s);
  97.         part.append("((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[4");
  98.         part.append("69])|(11))");
  99.         part.append(s);
  100.         part.append("((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\");
  101.         part
  102.                 .append("s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([1");
  103.         part.append("3579][01345789]))");
  104.         part.append(s);
  105.         part.append("((((0?[13578])|(1[02]))");
  106.         part.append(s);
  107.         part.append("((");
  108.         part.append("0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))");
  109.         part.append(s);
  110.         part.append("((");
  111.         part.append("0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))");
  112.         part.append(s);
  113.         part.append("((");
  114.         part.append("0?[1-9])|([1-2][0-9])|(30)))|(0?2");
  115.         part.append(s);
  116.         part.append("((0?[1-9])|(1[0-9])|(2[0-8]))))))");
  117.         part
  118.                 .append("(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])\\:([0-5]?[0-9])))?");
  119.         return Pattern.matches(part.toString(), dateTime);
  120.     }
  121.     public static boolean isDate(String date) {
  122.         return isDate(date, "-");
  123.     }
  124.     /**
  125.      * 校验日期 月 日 可以不写前面的0 ,例如 2008-9-2 3:9:1
  126.      * 
  127.      * @param date
  128.      * @param partition
  129.      *            分隔符 这里只支持 \、/、-、空格 四类分隔符,如果是长度大于1,则取第一个字符作为分隔符
  130.      * @return 如何符合格式,返回true
  131.      */
  132.     public static boolean isDate(String date, String partition) {
  133.         if (date == null || partition == null || "".equals(partition))
  134.             return false;
  135.         String s = "";
  136.         char split = partition.charAt(0);
  137.         if (split != '\\' && split != '/' && split != '-' && split != ' ')
  138.             throw new IllegalArgumentException((new StringBuilder(
  139.                     "partition can not start with '")).append(partition)
  140.                     .append("'!").toString());
  141.         s = (new StringBuilder(String.valueOf(s))).append(split).toString();
  142.         StringBuilder part = new StringBuilder(
  143.                 "^((\\d{2}(([02468][048])|([13579][26]))");
  144.         part.append(s);
  145.         part.append("((((0?[13578]");
  146.         part.append(")|(1[02]))");
  147.         part.append(s);
  148.         part.append("((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[4");
  149.         part.append("69])|(11))");
  150.         part.append(s);
  151.         part.append("((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\");
  152.         part
  153.                 .append("s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([1");
  154.         part.append("3579][01345789]))");
  155.         part.append(s);
  156.         part.append("((((0?[13578])|(1[02]))");
  157.         part.append(s);
  158.         part.append("((");
  159.         part.append("0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))");
  160.         part.append(s);
  161.         part.append("((");
  162.         part.append("0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))");
  163.         part.append(s);
  164.         part.append("((");
  165.         part.append("0?[1-9])|([1-2][0-9])|(30)))|(0?2");
  166.         part.append(s);
  167.         part.append("((0?[1-9])|(1[0-9])|(2[0-8]))))))$");
  168.         return Pattern.matches(part.toString(), date);
  169.     }
  170.     /**
  171.      * 校验时间 时间可以不写前面的0 如 9:3:1
  172.      * 
  173.      * @param time
  174.      *            时间
  175.      * @return
  176.      */
  177.     public static boolean isTime(String time) {
  178.         if (time == null)
  179.             return false;
  180.         else
  181.             return PATTERN_TIME.matcher(time).matches();
  182.     }
  183.     /**
  184.      * 严格校验身份证的格式,支持15位和18位校验
  185.      * 
  186.      * @param card
  187.      * @return
  188.      */
  189.     public static boolean isIdCard(String card) {
  190.         if (card == null)
  191.             return false;
  192.         int length = card.length();
  193.         if (length == 15) {// 15位号码身份证
  194.             if (!PATTERN_IDCARD_15.matcher(card).matches())
  195.                 return false;
  196.             if (!addressCode.containsKey(card.substring(02)))
  197.                 return false;
  198.             String birthday = (new StringBuilder("19")).append(
  199.                     card.substring(68)).append("-").append(
  200.                     card.substring(810)).append("-").append(
  201.                     card.substring(1012)).toString();
  202.             if (!isDate(birthday))
  203.                 return false;
  204.         } else if (length == 18) {// 18位号码身份证
  205.             if (!PATTERN_IDCARD_18.matcher(card).matches())// 格式不匹配
  206.                 return false;
  207.             if (!addressCode.containsKey(card.substring(02)))// 不符合地区码
  208.                 return false;
  209.             String birthday = (new StringBuilder(card.substring(610)))
  210.                     .append("-").append(card.substring(1012)).append("-")
  211.                     .append(card.substring(1214)).toString();
  212.             if (!isDate(birthday))
  213.                 return false;
  214.             int sum = 0;
  215.             for (int i = 0; i < length - 1; i++)
  216.                 sum += (card.charAt(i) - 48) * idCoefficient[i];
  217.             char mod = idMod[sum % 11];
  218.             if (mod != Character.toLowerCase(card.charAt(17)))
  219.                 return false;
  220.         } else {
  221.             return false;
  222.         }
  223.         return true;
  224.     }
  225.    
  226.     /**
  227.      * 校验IP格式
  228.      * @param ip
  229.      * @return
  230.      */
  231.     public static boolean isIP(String ip) {
  232.         if (ip == null)
  233.             return false;
  234.         else
  235.             return PATTERN_IP.matcher(ip).matches();
  236.     }
  237.     
  238.     /**
  239.      * 校验是否有重复字符
  240.      * @param repeat
  241.      * @return
  242.      */
  243.     public static boolean hasRepeat(String repeat) {
  244.         if (repeat == null)
  245.             return false;
  246.         else
  247.             return PATTERN_REPEAT.matcher(repeat).matches();
  248.     }
  249.     public static Map<String, String> addressCode;
  250.     public static int idCoefficient[] = { 7910584216379,
  251.             105842 };
  252.     public static char idMod[] = { '1''0''x''9''8''7''6''5''4',
  253.             '3''2' };
  254.     static {
  255.         addressCode = new HashMap<String, String>(35);
  256.         addressCode.put("11""\u5317\u4EAC");
  257.         addressCode.put("12""\u5929\u6D25");
  258.         addressCode.put("13""\u6CB3\u5317");
  259.         addressCode.put("14""\u5C71\u897F");
  260.         addressCode.put("15""\u5185\u8499\u53E4");
  261.         addressCode.put("21""\u8FBD\u5B81");
  262.         addressCode.put("22""\u5409\u6797");
  263.         addressCode.put("23""\u9ED1\u9F99\u6C5F");
  264.         addressCode.put("31""\u4E0A\u6D77");
  265.         addressCode.put("32""\u6C5F\u82CF");
  266.         addressCode.put("33""\u6D59\u6C5F");
  267.         addressCode.put("34""\u5B89\u5FBD");
  268.         addressCode.put("35""\u798F\u5EFA");
  269.         addressCode.put("36""\u6C5F\u897F");
  270.         addressCode.put("37""\u5C71\u4E1C");
  271.         addressCode.put("41""\u6CB3\u5357");
  272.         addressCode.put("42""\u6E56\u5317");
  273.         addressCode.put("43""\u6E56\u5357");
  274.         addressCode.put("44""\u5E7F\u4E1C");
  275.         addressCode.put("45""\u5E7F\u897F");
  276.         addressCode.put("46""\u6D77\u5357");
  277.         addressCode.put("50""\u91CD\u5E86");
  278.         addressCode.put("51""\u56DB\u5DDD");
  279.         addressCode.put("52""\u8D35\u5DDE");
  280.         addressCode.put("53""\u4E91\u5357");
  281.         addressCode.put("54""\u897F\u85CF");
  282.         addressCode.put("61""\u9655\u897F");
  283.         addressCode.put("62""\u7518\u8083");
  284.         addressCode.put("63""\u9752\u6D77");
  285.         addressCode.put("64""\u5B81\u590F");
  286.         addressCode.put("65""\u65B0\u7586");
  287.         addressCode.put("71""\u53F0\u6E7E");
  288.         addressCode.put("81""\u9999\u6E2F");
  289.         addressCode.put("82""\u6FB3\u95E8");
  290.         addressCode.put("91""\u56FD\u5916");
  291.     }
  292. }
3
0
分享到:
评论
1 楼 kxyk 2008-11-11  
不错,先收藏了

相关推荐

    kettle文档自己整理的带例子

    里边都是我自己整理的例子 大概试了30多个常用的 每个都附带个例子 例子都能跑通 1、输入 2 1.1)文本输入 2 1.2)表输入 3 2、输出 3 2.1)文本输出 3 2.2)输出表 4 3、连接 5 3. 1)“Merge” 5 3.2)Sorted ...

    通用数据库访问类sql server 版本常用方法封装

    在执行命令文本时后,传递sql语句运用Regex re = new Regex(@"@[a-zA-Z0-9]") 则正则表达式进行配匹, * 提高安全性。 * Version: 1.0 * Created: 2012.08.02 * Author: liangjw * Company: Copyright (C) Create ...

    正则表达式30分钟入门教程

    下面是一些使用重复的例子: Windows\d+匹配Windows后面跟1个或更多数字 ^\w+匹配一行的第一个单词(或整个字符串的第一个单词,具体匹配哪个意思得看选项设置) 字符类 要想查找数字,字母或数字,空白是很简单的,...

    C#中常用的正则表达式实例

    目前为止,许多编程语言和工具都包含对正则表达式的支持,C#也不例外,C#基础类库中包含有一个命名空间(System.Text.RegularExpressions)和一系列可以充分发挥规则表达式威力的类(Regex、Match、Group等)。...

    精通正则表达式~~~

    常用的元字符和特性... 113 字符表示法... 115 字符组及相关结构... 118 锚点及其他“零长度断言” 129 注释和模式量词... 135 分组,捕获,条件判断和控制... 137 高级话题引导... 142 第4章:表达式的匹配...

    正则表达式高级技巧及实例详解 笨活儿

    我们筛选出了八个常用的概念,并配上实例解析,每个例子都是满足某种复杂要求的简单写法。如果你对正则的基本概念尚缺乏了解,请先阅读 这篇文章,或者 这个教程,或者维基条目。 这里的正则语法适用于PHP,

    正则表达式的高级技巧分享

    筛选出了八个常用的概念,并配上实例解析,每个例子都是满足某种复杂要求的简单写法。如果你对正则的基本概念尚缺乏了解,请先阅读这篇文章,或者这个教程,或者维基条目。 这里的正则语法适用于php,与perl兼容。 ...

    Spring Security-3.0.1中文官方文档(翻译版)

    subject-principal-regex 属性 B.1.11.2. user-service-ref 属性 B.1.12. &lt;openid-login&gt; 元素 B.1.13. &lt;logout&gt; 元素 B.1.13.1. logout-url 属性 B.1.13.2. logout-success-url 属性 B.1.13.3. ...

    vim使用进阶:vim使用技巧、配置、命令和插件

    本文介绍了最常用的一些移动命令,在下篇文章中将介绍更高级的移动方法。 vim使用进阶: 指随意动,移动如飞 (二) 本文介绍如何在vim中移动,主要涉及如何使用跳转表(jump-motions)、使用标记(mark)、使用折行(fold...

    Spring Security 中文教程.pdf

    subject-principal-regex 属性 B.1.11.2. user-service-ref 属性 B.1.12. &lt;openid-login&gt; 元素 B.1.13. &lt;logout&gt; 元素 B.1.13.1. logout-url 属性 B.1.13.2. logout-success-url 属性 B.1.13.3. ...

    SpringSecurity 3.0.1.RELEASE.CHM

    subject-principal-regex属性 B.1.11.2. user-service-ref属性 B.1.12. 元素 B.1.13. 元素 B.1.13.1. logout-url属性 B.1.13.2. logout-success-url属性 B.1.13.3. invalidate-session属性 B.1.14. 元素 B....

    jquery插件使用方法大全

    使一个Dom对象成为一个Jquery对象很简单,通过下面一些方式(只是一部分): 代码 var a = $("#cid"); var b = $("&lt;p&gt;hello&lt;/p&gt;"); var c = document.createElement("table"); var tb = $(c); 编辑本段代替body...

    JavaScript对象验证库js-validator.zip

    举个例子var example = {  text: 'Hello world!',  date: '2015-07-07',  comments: null,  },  rules = {  text: 'required|string',  date: 'date|date_format:yyyy-MM-dd',  comments: '...

    HttpClient以及获取页面内容应用

    1.5常用Api 类名称 描述 1.5.1项目 1.5.2项 尽早解决。 1.6应用 1.6.1发送get请求获取网页内容 HttpClient client = new HttpClient(); //设置代理服务器地址和端口 //client....

    Java-PHP-C#

    他们分别表示:"zero or more", "one or more", and "zero or one." 这里是一些例子: "ab*": 匹配字符串a和0个或者更多b组成的字符串("a", "ab", "abbb", etc.); "ab+": 和上面一样,但最少有一个b ("ab", ...

    ASP3《高级编程》(第一部分)

    6.3.3 RegEx注册表访问组件 207 6.4 小结 209 第7章 调试和错误处理 210 7.1 错误的种类 211 7.1.1 语法或“编译”错误 211 7.1.2 语义或“运行期”错误 215 7.2 各种运行期错误 218 7.2.1 逻辑错误 219 ...

    ASP3《高级编程》(第二部分)

    6.3.3 RegEx注册表访问组件 207 6.4 小结 209 第7章 调试和错误处理 210 7.1 错误的种类 211 7.1.1 语法或“编译”错误 211 7.1.2 语义或“运行期”错误 215 7.2 各种运行期错误 218 7.2.1 逻辑错误 219 ...

    net学习笔记及其他代码应用

    22.常用的调用WebService的方法有哪些? 答:1.使用WSDL.exe命令行工具。 2.使用VS.NET中的Add Web Reference菜单选项 23..net Remoting 的工作原理是什么? 答:服务器端向客户端发送一个进程编号,一个程序域...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    如果你有常用的定义好的,且测试通过的正规表达式,欢迎跟贴,也让我享用一下 . 类中用到了 jakarta-oro-2.0.jar 包,请大家自己在 apache网站下下载 在这是junit测试单元类我就不提交了,在main()方法中有几个小...

Global site tag (gtag.js) - Google Analytics