您的位置:首页 > 编程语言 > Java开发

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

2013-08-06 13:45 435 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐