Java:几个正则式应用(检查汉字、日期、EMAIL、手机号码的合法性,替换字符串等)
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、手机号码的合法性,替换字符串等)的更多相关文章
- 正则双重过滤 /// splitKey1 第一个正则式匹配 /// splitKey2 匹配结果中再次匹配进行替
/// <summary> /// 正则双重过滤 /// splitKey1 第一个正则式匹配 /// splitKey2 匹配结果中再次匹配进行替换 /// </summary&g ...
- JavaScript正则式练习
使用正则式匹配第一个数字和最后一个数字,使用环视 str2 = 09051 : Fast Food Restaurants - Concession Stands/Snack Bars Delicat ...
- JavaScript正则式入门
正则式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符合某个模式(规 ...
- Java 中的正则(Pattern)
/**String 中 replaceAll(),matches(),split() 等方法,都是调用Pattern中的方法.学习了,瞬间觉得Pattern强大了 public String repl ...
- Python正则式的基本用法
Python正则式的基本用法 1.1基本规则 1.2重复 1.2.1最小匹配与精确匹配 1.3前向界定与后向界定 1.4组的基本知识 2.re模块的基本函数 2.1使用compile加速 2.2 ma ...
- Python使用re模块正则式的预编译及pickle方案
项目上线要求当中有言论和昵称的过滤需求, 客户端使用的是python脚本, python脚本中直接利用re模块来进行正则匹配, 一开始的做法是开启游戏后, 每帧编译2条正则式, 无奈运营需求里面100 ...
- java中的正则操作总结
http://www.cnblogs.com/nerxious/archive/2013/01/03/2842910.html 正则表达式在处理字符串的效率上是相当高的 关于正则表达式的使用,更多的是 ...
- PHP正则式PCRE
PHP正则式PCRE的总结差不多就下边这些了.参考 PCRE与perl的差异 . 锚(^.$.\A.\Z/\z):^.$在多行模式下是非紧固的,在单行模式下是紧固的:而\A.\Z / \z在任何模 ...
- java并发多线程显式锁Condition条件简介分析与监视器 多线程下篇(四)
Lock接口提供了方法Condition newCondition();用于获取对应锁的条件,可以在这个条件对象上调用监视器方法 可以理解为,原本借助于synchronized关键字以及锁对象,配备了 ...
- java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)
目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronized关键字,对于静态方法默认是以该类的class对象作为锁,对于实例方 ...
随机推荐
- [Javascript] Understand Curry
The act of currying can be described as taking a multivariate function and turning it into a series ...
- ZOJ 3587 扩展KMP
思路:这题确实大帝做得非常机智!字符串先求最长前缀,反的字符串再求一次最长前缀.然后就能够搞了. 每一个子串出现的次数就是最长前缀的次数嘛! #pragma comment(linker, " ...
- redis队列及多线程应用
由于xxx平台上自己的博客已经很久没更新了,一直以来都是用的印象笔记来做工作中知识的积累存根,不知不觉印象笔记里已经有了四.五百遍文章.为了从新开始能与广大攻城狮共同提高技术能力与水平,随决心另起炉灶 ...
- 生成activiti需要的25张系统表
Activiti的运行支持,必须要有Activiti的25张表,主要是在流程运行过程中,记录存储一些参与流程的用户主体, 组,以及流程定义的存储,流程执行时候的一些信息,以及流程的历史信息等. 下面我 ...
- 【转载】如何在Oracle中复制表结构和表数据
1. 复制表结构及其数据: create table table_name_new as select * from table_name_old 2. 只复制表结构: create table ta ...
- 页面可视化编辑ckeditor(web基础学习笔记十五)
一.CKedit下载ckedit 下载地址:http://ckeditor.com/ 二.ckedit的引入 2.1.解压并将ckedit复制到项目中 2.2.在页面中引入 在页面头部加入 <s ...
- The jQuery HTML5 Audio / Video Library (jQuery jPlayer插件给你的站点增加视频和音频功能)
http://jplayer.org/ The jQuery HTML5 Audio / Video Library jPlayer is the completely free and open s ...
- Hadoop内部的限流机制
前言 文章标题一開始提及到了一个令人感到有些抽象又显得有些非常"大"的词,限流.事实上这个词语在非常多行业都能够用到,比方近期春运,各大主要城市,火车站,地铁站都要做到限流吧,避免 ...
- webpack entry和output配置属性
1.entry entry的三种配置方式: (1)传递字符串: 单个入口语法:传递一个字符串 entry: './src/js/main.js', (2)传递数组 将创建“多个主入口(multi-ma ...
- Python画图matplotlib展示图中中文乱码
在用python的 matplotlib 画图的时候,在图表上面有中文乱码问题,如下的: 解决过程: 平台:windows,python2.7步骤一:打开设置文件 import matplotlib ...