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

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  
不错,先收藏了

相关推荐

    java regex例子

    下面我们将深入探讨Java正则表达式的基本概念、常用方法以及RegexDemo.jpx项目中的可能示例。 1. **基本概念** - **模式(Pattern)**: 正则表达式的模板,用于描述字符串的匹配规则。 - **匹配器(Matcher)**: ...

    C++Regex正则表达式

    2. **匹配器(Matcher)**:`std::regex_match` 和 `std::regex_search` 是两种常用的匹配器,分别用于判断整个字符串是否匹配和字符串中是否存在匹配部分。 3. **迭代器(Iterator)**:`std::sregex_iterator` 和...

    RegexTester 正则表达式工具及教程

    6. **教程资源**:附带的 `RegExpHelp.CHM` 文件是一个详细的正则表达式帮助文档,包含了大量的例子和解释,帮助初学者快速掌握正则表达式的基本概念和高级特性,如字符类、量词、预查、环视等。 7. **便捷的界面**...

    正则表达式常用例子总结

    以下是我整理的一些正则表达式的常用例子,旨在帮助理解其基本用法和功能。 1. **基本匹配** - 匹配单个字符:`\d` 代表数字,`\w` 代表字母或数字,`\s` 代表空白符。 - 匹配范围:`[a-z]` 匹配小写字母,`[A-Z]...

    C#正则表达式Regex类的常用匹配

    以下是一些关于Regex类的常用匹配方法的详细说明: 1. **匹配验证** - `IsMatch` 方法用于检查字符串是否符合指定的正则表达式模式。例如,在示例1中,我们检查字符串是否包含特定的敏感词"孙权",如果匹配成功,...

    C#_Regex_深入正则表达式.doc

    有两个常用的构造函数: 1. `Regex regex = new Regex("pattern")`,这里的"pattern"是你要匹配的正则表达式字符串。 2. `Regex regex = new Regex("pattern", RegexOptions)`,除了正则表达式字符串外,还可以传入...

    Python库 | hypothesis-regex-0.3.tar.gz

    Python库Hypothesis-Regex是Python开发者常用的工具之一,它主要为Python的Hypothesis库提供了正则表达式策略。Hypothesis是一个强大的基于类型推断的测试数据生成框架,而Hypothesis-Regex扩展了这个框架,使得我们...

    PHP 常用的正则表达式例子

    这篇博文“PHP 常用的正则表达式例子”很可能提供了一些实用的代码示例,帮助开发者更好地理解和应用正则表达式。虽然没有直接的描述内容,我们可以根据标题推测文章可能涵盖了以下关键知识点: 1. **正则表达式...

    STL使用例子代码集合

    - **regex**:正则表达式库,C++11引入的新特性,用于文本模式匹配和搜索。 - **io**:输入/输出流相关代码,如文件I/O和标准输入输出的处理。 通过学习这个代码集合,你可以掌握C++ STL的核心概念,提升你的C++...

    正则教程 regex regular expression

    正则表达式使用一系列的特殊字符来构建模式,以下是一些常用元字符及其含义: - `^`:匹配字符串的开始。 - `$`:匹配字符串的结束。 - `{n,m}`:匹配前面的字符至少n次,至多m次。 - `[abc]`:匹配括号内的任一...

    C#正则表达式小例子[源码]

    以下是一些关键知识点: 1. **创建正则表达式对象**: 在C#中,我们首先需要创建一个`Regex`对象,传入正则表达式模式作为构造函数的参数。例如: ```csharp Regex regex = new Regex("模式"); ``` 此处的...

    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 ...

    常用正则表达式HTML,JAVA合集

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、数据提取等IT领域。在这个“常用正则表达式HTML,JAVA合集”中,我们主要关注的是HTML和Java环境下的正则...

    个人收集的一些实用小代码

    以上就是从标题和描述中提炼出的一些关键知识点,涵盖了ASP数据库连接、XML文件读取、正则表达式应用以及浮动广告的实现,同时也提及了PHP的一些常用函数。这些技能在Web开发中非常实用,能够帮助开发者提高工作效率...

    常用Struts校验器

    这个例子中,首先通过RequiredString确保电话号码字段不为空;然后通过Regex校验器确保电话号码全部由数字组成。 #### 总结 通过上述介绍可以看出,Struts框架提供了一系列丰富的校验器来帮助开发者实现前端数据的...

    常用正则表达式集合

    - **零宽度断言**:`\b`(单词边界)是零宽度断言的例子,还有`^`(行首)、`$`(行尾)、`(?=pattern)`(正向前瞻)和`(?!pattern)`(负向前瞻)等。 - **回溯控制**:使用`\G`可以匹配上一次匹配的位置,避免...

    JAVA正则表达式4种常用的功能.doc

    ### JAVA正则表达式四种常用功能详解 #### 一、查询功能 正则表达式的查询功能可以帮助我们在文本中快速定位特定的模式。这种功能在文本处理、数据验证以及搜索算法中非常常见。 **示例代码**: ```java String ...

    java常用函数.txt

    在类的定义前,有注释提供了关于该类的一些基本信息,例如作者、版本等。 ### 2. 导入(Import)语句 在Java程序中,为了使用其他包中的类或者接口,我们需要通过导入语句来引入它们。例如: - `import java.util....

    JAVA 正则表达式4种常用的功能.txt

    ### JAVA正则表达式的四种常用功能 在Java中,正则表达式是一种强大的文本处理工具,可以用于字符串的搜索、替换等操作。本文将详细解释Java正则表达式的四种常见功能:匹配、分组、分割以及替换,并通过具体的示例...

Global site tag (gtag.js) - Google Analytics