Java 常用正则表达式
Java 常用正则表达式
1. 身份证号码:
1) 身份证正则表达式(15位)
^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$
forJava:
Pattern p = Pattern.compile("^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$");
------ ------ ------ 说明 start ------ ------ ------
15位身份证号码各位的含义:
1-2位省、自治区、直辖市代码;
3-4位地级市、盟、自治州代码;
5-6位县、县级市、区代码;
7-12位出生年月日,比如670401代表1967年4月1日,与18位的第一个区别;
13-15位为顺序号,其中15位男为单数,女为双数;
------ ------ ------ 说明 end ------ ------ ------
2) 身份证正则表达式(18位)^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$
forJava:
Pattern p = Pattern.compile("^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{4}$");
------ ------ ------ 说明 start ------ ------ ------
18位身份证号码各位的含义:
1-2位省、自治区、直辖市代码;
3-4位地级市、盟、自治州代码;
5-6位县、县级市、区代码;
7-14位出生年月日,比如19670401代表1967年4月1日;
15-17位为顺序号,其中17位(倒数第二位)男为单数,女为双数;
18位为校验码,0-9和X。作为尾号的校验码,是由把前十七位数字带入统一的公式计算出来的,计算的结果是0-10,
如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位。X是罗马数字的10,用X来代替10。
------ ------ ------ 说明 end ------ ------ ------
2. 电话号码:
1) 移动电话:
^((13[0-9])|(15[^4,\D])|(18[0-9]))\d{8}$
------ ------ ------ 说明 start ------ ------ ------
中国电信手机号码开头数字 133、1349、153、180、181、189
中国联通手机号码开头数字 130、131、132、145、155、156、185、186
中国移动手机号码开头数字 1340-1348、135、136、137、138、139、147、150、151、152、157、158、159、182、183、184、187、188
补充:14开头的号码以前为上网卡专属号段,如联通的是145,移动的是147等等。不过现在14开头的号码也可以使用语音通话等全部业务,不受限制。
------ ------ ------ 说明 end ------ ------ ------
forJava:
Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
2) 固定电话:
--------------- 区号-号码 -------------------
String regex1 = "\\(?(010|021|022|023|024|025|026|027|028|029|852)?\\)?-?\\d{8}";//3位区号,8位号码
String regex2 = "\\(?(0[3-9][0-9]{2})?\\)?-?\\d{7,8}";//4位区号
String regex3 = "(\\(?(010|021|022|023|024|025|026|027|028|029|852)?\\)?-?\\d{8})|(\\(?(0[3-9][0-9]{2})?\\)?-?\\d{7,8})";
--------------- 加上分机号 (\\-?[0-9]{1,4})? ------- 区号-号码-分机号 ---------------
String regex1 = "\\(?(010|021|022|023|024|025|026|027|028|029|852|)\\)?-?\\d{8}(\\-?[0-9]{1,4})?";//3位区号
String regex2 = "\\(?(0[3-9][0-9]{2})\\)?-?\\d{7,8}(\\-?[0-9]{1,4})?";//4位区号
String regex3 = "(\\(?(010|021|022|023|024|025|026|027|028|029|852|)\\)?-?\\d{8}(\\-?[0-9]{1,4})?)|(\\(?(0[3-9][0-9]{2})\\)?-?\\d{7,8}(\\-?[0-9]{1,4})?)";
3. IP地址:
(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)){3}
forJava:
(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]?\\d)){3}
4. 邮箱:
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
forJava:
p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
5. 日期: ------------- 年-月-日: ------------------
年: //年份为四位,且不能是0000
([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})
月-日 //未考虑闰年.
((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))
年-月-日
Pattern.compile("([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))");//说明:
年份为四位,且不能是0000,之后是月日,未考虑闰年.
6. 中文: [\u4e00-\u9fa5]
forJava:
p = Pattern.compile("^[\u4e00-\u9fa5]+$");
======================== 说明 ==================
1. \w ---> 单词字符[a-zA-Z_0-9],即Java中的标识符
\w+ ---> 一个或多个单词字符[a-zA-Z_0-9]{1,}
2. [-+.]
---> -或+或. 单个字符
3. X* ---> 零次或多次
X? ---> 零次或一次
X+ ---> 一次或多次
4. 需要转义的特殊字符:
\ ---> \\
[ ---> \[
] ---> \]
( ---> \(
) ---> \)
{ ---> \{
} ---> \}
. ---> \.
* ---> \*
? ---> \?
+ ---> \+
^ ---> \^
$ ---> \$
| ---> \|
5. 常用正则表达式查询地址:
http://www.ostools.net/regex#