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对象作为锁,对于实例方 ...
随机推荐
- Android MVP 构架封装
上一篇我们简单实现了一个MVP的构架,下面我们来做一个简单的封装使其使用更简单方便 源码地址RxMVP分支Tag03 最终实现目录结构如下 BasePresenter 如果每一个Activity都需要 ...
- 移动H5前端性能优化指南[转]
移动H5前端性能优化指南 米随随2015.01.23 移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首 ...
- vue 笔记一
vue: 读音: v-u-e view vue到底是什么? 一个mvvm框架(库).和angular类似 比较容易上手.小巧 mvc: mvp mvvm mv* mvx 官网:http://cn.vu ...
- org.dom4j.DocumentException:对实体 "virtual_card_id" 的引用必须以 ';' 分隔符结尾
Error on line 1 of document : 对实体 "virtual_card_id" 的引用必须以 ';' 分隔符结尾. CreateTime--2018年 ...
- 〖Android〗/system/etc/audio_policy.conf
原文件注释说明: # audio hardware module section: contains descriptors for all audio hw modules present on t ...
- 新浪API及调用案例
百度分享:http://pan.baidu.com/s/1uSmku
- 生产服务器环境最小化安装后 Centos 6.5优化配置备忘
生产服务器环境最小化安装后 Centos 6.5优化配置备忘 作者:Memory 发布于:2014-8-13 15:00 Wednesday 服务器 本文 centos 6.5 优化 的项有18处: ...
- 使用SpringMVC搭建第一个项目
概述 使用SpringMVC搭建第一个项目,入门教程,分享给大家. 详细 代码下载:http://www.demodashi.com/demo/10596.html 一.概述 1.什么是Spring ...
- Android网络开发之WebKet引擎基础
Android浏览器的内核是Webkit引擎,WebKit的前身是KDE小组的KHTML. Apple公司推出的Safari浏览器,使用的内核是装备了KHTML的WebKit引擎. WebKit内核在 ...
- 使用DotNetBarcode制作基本常用条码
核心代码: /// <summary> /// 打印一维码 /// </summary> /// <param name="codeText"> ...