1. 检查输入是否为合法汉字

    /**
* 判断输入字符是否为有效汉字
* @param str 字符
* @return 是否合法汉字
*/
public static boolean isValidHan(String str) {
String regex = "[\u4e00-\u9fa5]*"; Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str); return matcher.matches();
}

2. 检查输入是否为合法日期

    /**
* @param 日期验证,验证的格式有:"yyyyMM","yyyyMMdd","yyyyMMdd HH:mm:ss",
* "yyyy-MM","yyyy-MM-dd","yyyy-MM-dd HH:mm:ss"
* "yyyy.MM","yyyy.MM.dd","yyyy.MM.dd HH:mm:ss"
* "yyyy/MM","yyyy/MM/dd","yyyy/MM/dd HH:mm:ss"
* "yyyy_MM","yyyy_MM_dd","yyyy_MM_dd HH:mm:ss"
* @param str
* @return false/true
*/
public static boolean isValidDate(String str) {
if(null == str || "".equals(str)){
return false;
} Pattern pattern = null;
Matcher matcher = null; String regex = "(" +
//第一种情况为月份是大月的有31天。
"(^\\d{3}[1-9]|\\d{2}[1-9]\\d{1}|\\d{1}[1-9]\\d{2}|[1-9]\\d{3}" +//年
"([-/\\._]?)" +//时间间隔符(-,/,.,_)
"(10|12|0?[13578])" +//大月
"([-/\\._]?)" +//时间间隔符(-,/,.,_)
"((3[01]|[12][0-9]|0?[1-9])?)" +//日(31)要验证年月因此出现0/1次
"([\\s]?)" +//空格
"((([0-1]?[0-9]|2[0-3]):([0-5]?[0-9]):([0-5]?[0-9]))?))$" +//时分秒
"|" +//或
//第二种情况为月份是小月的有30天,不包含2月。
"(^\\d{3}[1-9]|\\d{2}[1-9]\\d{1}|\\d{1}[1-9]\\d{2}|[1-9]\\d{3}" +//年
"([-/\\._]?)" +//时间间隔符(-,/,.,_)
"(11|0?[469])" +//小月不含2月
"([-/\\._]?)" +//时间间隔符(-,/,.,_)
"(30|[12][0-9]|0?[1-9])" +//日(30)
"([\\s]?)" +//空格
"((([0-1]?[0-9]|2[0-3]):([0-5]?[0-9]):([0-5]?[0-9]))?))$" +//时分秒
"|" +//或
//第三种情况为平年月份是2月28天的。
"(^\\d{3}[1-9]|\\d{2}[1-9]\\d{1}|\\d{1}[1-9]\\d{2}|[1-9]\\d{3}" +//年
"([-/\\._]?)" +//时间间隔符(-,/,.,_)
"(0?2)" +//平年2月
"([-/\\._]?)" +//时间间隔符(-,/,.,_)
"(2[0-8]|1[0-9]|0?[1-9])" +//日(28)
"([\\s]?)" +//空格
"((([0-1]?[0-9]|2[0-3]):([0-5]?[0-9]):([0-5]?[0-9]))?))$" +//时分秒
"|" +//或
//第四种情况为闰年月份是2月29天的。
//可以被4整除但不能被100整除的年份。
//可以被400整除的数亦是能被100整除,因此后两位是00,所以只要保证前两位能被4整除即可。
"(^((\\d{2})(0[48]|[2468][048]|[13579][26]))|((0[48]|[2468][048]|[13579][26])00)" +
"([-/\\._]?)" +
"(0?2)" +
"([-/\\._]?)" +
"(29)" +
"([\\s]?)" +
"((([0-1]?\\d|2[0-3]):([0-5]?\\d):([0-5]?\\d))?))$" +//时分秒
")";; pattern = Pattern.compile(regex);
matcher = pattern.matcher(str); return matcher.matches();
}

3. 检查输入是否为合法EMAIL

    /**
* 判断是否合法EMAIL
* @param email 输入地址
* @return 是否合法EMAIL
*/
public static boolean isValidEmail(String email) {
//p{Alpha}:内容是必选的,和字母字符[\p{Lower}\p{Upper}]等价。如:200896@163.com不是合法的。
//w{2,15}: 2~15个[a-zA-Z_0-9]字符;w{}内容是必选的。 如:dyh@152.com是合法的。
//[a-z0-9]{3,}:至少三个[a-z0-9]字符,[]内的是必选的。如:dyh200896@16.com是不合法的。
//[.]:'.'号时必选的。如:dyh200896@163com是不合法的。
//p{Lower}{2,}小写字母,两个以上。如:dyh200896@163.c是不合法的。
String regex = "\\p{Alpha}\\w{2,15}[@][a-z0-9]{3,}[.]\\p{Lower}{2,}"; Pattern mailPattern = Pattern.compile(regex);
Matcher matcher = mailPattern.matcher(email); return matcher.matches();
}

4. 检查是否为合法手机号段

    /**
* 是否有效手机号码,可以更改参数以只检查特定运营商的号段
* @param mobile 号码
* @return 是否合法手机号码
*/
@SuppressWarnings("unused")
public static boolean isValidMobile(String mobile){
/**
* 手机号码
* 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
* 联通:130,131,132,152,155,156,185,186
* 电信:133,1349,153,180,189
*/
String MOBILE = "^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$";
/**
* 中国移动:China Mobile
* 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
*/
String CM = "^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}$";
/**
* 中国联通:China Unicom
* 130,131,132,152,155,156,185,186
*/
String CU = "^1(3[0-2]|5[256]|8[56])\\d{8}$";
/**
* 中国电信:China Telecom
* 133,1349,153,180,189
*/
String CT = "^1((33|53|8[09])[0-9]|349)\\d{7}$";
/**
* 大陆地区固话及小灵通
* 区号:010,020,021,022,023,024,025,027,028,029
* 号码:七位或八位
*/
String PHS = "^0(10|2[0-5789]|\\d{3})\\d{7,8}$"; Pattern pattern = Pattern.compile(MOBILE);
Matcher matcher = pattern.matcher(mobile); return matcher.matches();
}

5. 找出字符串中第一个以”S“打头,到”E“结尾的子字符串,并替换成”ABC“。

import java.util.regex.Matcher;
import java.util.regex.Pattern; public class SimpleTest {
public static void main(String[] args) throws Exception {
String str = "S123E456E7890"; //S.*?E,”S“表示以S打头,”E“表示以E结尾,”.*“表示中间可以是任意字符,?表示找到第一个E即查找结束。  
Pattern p = Pattern.compile("S.*?E");
Matcher m = p.matcher(str);
if (m.find()) {
String findResult = m.group(0);
System.out.println("Find one:" + findResult); String replaceResult = m.replaceFirst("ABC");
System.out.println("Replace result:" + replaceResult);
}
}
}

运行结果

Find one:S123E

Replace result:ABC456E7890

Java:几个正则式应用(检查汉字、日期、EMAIL、手机号码的合法性,替换字符串等)的更多相关文章

  1. 正则双重过滤 /// splitKey1 第一个正则式匹配 /// splitKey2 匹配结果中再次匹配进行替

    /// <summary> /// 正则双重过滤 /// splitKey1 第一个正则式匹配 /// splitKey2 匹配结果中再次匹配进行替换 /// </summary&g ...

  2. JavaScript正则式练习

    使用正则式匹配第一个数字和最后一个数字,使用环视 str2 = 09051 : Fast Food Restaurants - Concession Stands/Snack Bars Delicat ...

  3. JavaScript正则式入门

    正则式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符合某个模式(规 ...

  4. Java 中的正则(Pattern)

    /**String 中 replaceAll(),matches(),split() 等方法,都是调用Pattern中的方法.学习了,瞬间觉得Pattern强大了 public String repl ...

  5. Python正则式的基本用法

    Python正则式的基本用法 1.1基本规则 1.2重复 1.2.1最小匹配与精确匹配 1.3前向界定与后向界定 1.4组的基本知识 2.re模块的基本函数 2.1使用compile加速 2.2 ma ...

  6. Python使用re模块正则式的预编译及pickle方案

    项目上线要求当中有言论和昵称的过滤需求, 客户端使用的是python脚本, python脚本中直接利用re模块来进行正则匹配, 一开始的做法是开启游戏后, 每帧编译2条正则式, 无奈运营需求里面100 ...

  7. java中的正则操作总结

    http://www.cnblogs.com/nerxious/archive/2013/01/03/2842910.html 正则表达式在处理字符串的效率上是相当高的 关于正则表达式的使用,更多的是 ...

  8. PHP正则式PCRE

    PHP正则式PCRE的总结差不多就下边这些了.参考 PCRE与perl的差异 .   锚(^.$.\A.\Z/\z):^.$在多行模式下是非紧固的,在单行模式下是紧固的:而\A.\Z / \z在任何模 ...

  9. java并发多线程显式锁Condition条件简介分析与监视器 多线程下篇(四)

    Lock接口提供了方法Condition newCondition();用于获取对应锁的条件,可以在这个条件对象上调用监视器方法 可以理解为,原本借助于synchronized关键字以及锁对象,配备了 ...

  10. java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)

    目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronized关键字,对于静态方法默认是以该类的class对象作为锁,对于实例方 ...

随机推荐

  1. php之快速入门学习-13(PHP 循环 - While 循环)

    PHP 循环 - While 循环 循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块. PHP 循环 在您编写代码时,您经常需要让相同的代码块一次又一次地重复运行.我们可以在代码中使用循 ...

  2. Java 类型, Hibernate 映射类型及 SQL 类型之间的相应关系

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...

  3. Junit和Spring

    @ContextConfiguration 用来指定加载的Spring配置文件的位置,会加载默认配置文件 例如下例会加载:classpath:/com/example/MyTest-context.x ...

  4. Android Studio 1.0RC1版公布

    Android Studio 1.0RC1 版本号公布. 下面是官网该版本号说明: Android Studio 1.0 Release Candidate 1 November 20th, 2014 ...

  5. visudo精确用户赋权(sudo)

    原文BLOG:http://iminmin.blog.51cto.com/689308/455992 sudo" 是Unix/Linux平台上的一个非常有用的工具,允许为非根用户赋予一些合理 ...

  6. oracle 11g完美卸载

      oracle 11g完美卸载 CreateTime--2018年4月22日17:07:19 Author:Marydon 对于oracle数据库的卸载,一定要卸载干净,否则,再次想装oracle时 ...

  7. css中clear属性的认识

    今天在看博客园的页面布局时发现有不少空白的div只有css属性:clear:both. 然后去W3C文档里和百度补脑了一下,总结如下: 这是之前我写的一段测试代码: <div style=&qu ...

  8. SQL Server死锁排查经历 -基于SqlProfiler

     提到sql server,想必最让人头疼的当属锁机制了.在默认的read committed隔离模式下,连最基本的select操作都要申请各种粒度的锁,而且在读取数据过程中会不断有锁升级.转化.在非 ...

  9. 【钉钉PC】PC端钉钉清除缓存

    最近被钉钉的PC端坑的要死要死的,一个缓存问题弄了我一天时间,去你大爷的,放在这里防止其他的人被坑. 1.右键点击微应用,选择devtools 2.展开的页面,就像web端的F12,勾选network ...

  10. cxf使用wsdl文件生成代码

    1.先下载cxf包 http://cxf.apache.org/download.html,现在cxf包.(下载资源就有) 2.解压缩包,通过cmd命令进入到bin目录下(cd cxf\bin的路径) ...