java中点的正则表达式_常用正则表达式

1. 验证 IP 地址

IP 地址为 0-255 之间的正整数,首位号段以0开头的IP地址不考虑(IEEE保留的IP地址,不予分配),即可能出现以下三种情况:

情况一:取值在0-9之间(首位号段在1-9之间);

情况二:取值在10-99之间;

情况三:取值在100-255之间;

除了开头段位不可以为0,其他剩下3个部分的段位的取值都是同一范围,因此,正则表达式可以写为:

String regex = null;

regex = "([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})(\\.([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})){3}";

public class TestRegex {

public static void main(String[] args) {

/*

* 情况一:取值在0-9之间(首位号段在1-9之间);[0-9](首位为[1-9])

* 情况二:取值在10-99之间;[1-9][0-9]

* 情况三:取值在100-255之间;1[0-9]{2}|2[0-5]{2}

*

* 除了开头段位不可以为0,其他剩下3个部分的段位的取值都是同一范围,因此,正则表达式可以写为:

*/

String regex = null;

regex = "([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})(\\.([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})){3}";

System.out.println("25.29.15.255".matches(regex));// true

System.out.println("255.255.255.255".matches(regex));// true

System.out.println("0.29.15.255".matches(regex));// false

}

}

2. 验证邮箱

邮箱用户名满足以下条件:

可以为纯数字(但不可以以0开头);

可以为数字,下滑点,点和字母表示;

不可以以下划线开头;

用户名长度在6-28个字符之间;

邮箱名称可以为纯数字(0除外),即开头1-9之间的数字可以出现,也可以不出现,另外中间主体部分可以为英文字符、下划线、点和数字,所以,用户名判断方面面的正则可以写为:

([1-9]?[0-9a-zA-Z_\\.]){6,28}

服务器的供应商(126),这部分可以为数字和英文字符,所以,这部分可以写为:

[0-9a-zA-Z]+

最后是邮箱的结尾部分,目前常用的邮箱结尾有:``com|cn|com.cn|net|gov|org|edt` 等几种常见的结尾,所以,最后部分可以用正则表达式表示为:

com|cn|com.cn|net|gov|org|edt

完整的正则表达式可以写为:

([1-9]?[0-9a-zA-Z_\\.]{6,28})@[0-9a-zA-Z]+\\.(com|cn|com.cn|net|gov|org|edt)

public class TestRegex {

public static void main(String[] args) {

String regex = null;

/*

* 以martin_depp@126.com为例子

*

* 用户名判断 martin_depp:([1-9]?[0-9a-zA-Z_\\.]){6,28}

* @ 和 . 固定方面:@ .

* 服务提供商(126-数字和字母):[0-9a-zA-Z]+

* 后缀名固定方面:com|cn|com.cn|net|gov|org|edt

*/

regex = "([1-9]?[0-9a-zA-Z_\\.]{6,28})@[0-9a-zA-Z]+\\.(com|cn|com.cn|net|gov|org|edt)";

System.out.println("martin_depp@126.com".matches(regex));// true

System.out.println("245749558@126.com".matches(regex));// true

}

}

3. 验证日期

本次以YYYY-MM-DD的格式来验证日期格式是否规范(日和月如果为10以下,可以省略前面的0,年份为0001-9999之间,0不可以省略),因为1-12月不同的月份日期天数存在不同,需要分开计算,另外,闰年作为特殊年份,2月有20天因此也需要分开验证,然后将正则合并。

分析:

年份:方面虽然存在平年和闰年,但是可以用通用的表示方法来表示平年,再与闰年的年份进行 "|" 即可;

月份:

1 月,3 月,5 月,7 月,8 月,10 月,12 月为 31天;

4 月,6 月,9 月,11 月 为 30天;

2月为28或29天;

3.1 验证平年的日期格式:

年份表达为:[0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3}

月份表达:

31天:0?[13578]|1[02]-(0?[1-9]|[1-2][0-9]|3[01])

30天:0?[469]|11-(0?[1-9]|[1-2][0-9]|30)

28天:0?2-(0?[1-9]|1[0-9]|2[0-8])

平年完整的正则表达式为:

([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3})-(((0?[13578]|1[02])-(0?[1-9]|[1-2][0-9]|3[01]))|((0?[469]|11)-(0?[1-9]|[1-2][0-9]|30))|((0?2)-(0?[1-9]|1[0-9]|2[0-8])))

3.2 验证闰年的日期格式:

闰年,即为能整除4,又不能被100整除的年份,此外,与平年唯一不同的就是闰年的2月是29天,其他与平年一样,所以,闰年可以表示为:

年份可以用一下三种方式表示:

[0-9]{2}[2468][048]

[0-9]{2}0[48]

[0-9]{2}[13579][26]

2月表示:0?2-(0?[1-9]|1[0-9]|2[0-9])

完整的闰年正则表达式如下:

([0-9]{2}([2468][048]|0[48]|[13579][26]))-(((0?[13578]|1[02])-(0?[1-9]|[1-2][0-9]|3[01]))|((0?[469]|11)-(0?[1-9]|[1-2][0-9]|30))|((0?2)-(0?[1-9]|1[0-9]|2[0-9])))

完整的日期格式正则验证表达式如下:

public class TestRegex {

public static void main(String[] args) {

String regex = null;

//判断日期注意月和日,排除闰年特殊情况

/*

* 年:0001-9999 :[0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3}

* 月:1、3、5、7、8、10、12 :0?[13578]|1[02]

* 4、6、9、11 :0?[469]|11

* 2 :0?2

* 日:大月:0?[1-9]|[1-2][0-9]|3[01]

* :平月:0?[1-9]|[1-2][0-9]|30

* :小月:0?[1-9]|1[0-9]|2[0-8]

*

*/

regex = "([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3})-(((0?[13578]|1[02])-(0?[1-9]|[1-2][0-9]|3[01]))|((0?[469]|11)-(0?[1-9]|[1-2][0-9]|30))|((0?2)-(0?[1-9]|1[0-9]|2[0-8])))";

String part01 = regex;

/*

* 闰年情况:

* [0-9]{2}[2468][048]

* [0-9]{2}0[48]

* [0-9]{2}[13579][26]

*/

regex = "([0-9]{2}([2468][048]|0[48]|[13579][26]))-(((0?[13578]|1[02])-(0?[1-9]|[1-2][0-9]|3[01]))|((0?[469]|11)-(0?[1-9]|[1-2][0-9]|30))|((0?2)-(0?[1-9]|1[0-9]|2[0-9])))";

String part02 = regex;

//完整的日期格式校验正则表达式,将两块进行拼接

regex = part01+"|"+part02;

System.out.println("1992-03-28".matches(regex));// true

System.out.println("1992-02-29".matches(regex));// true

System.out.println("1990-02-29".matches(regex));// false

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值