JAVA日期格式校验正则表达式方法 yyyy年MM月dd日 yyyy.MM.dd格式

可匹配2022年05月27日 或2022年5月1日格式 ,区分闰年

var pattern = /^(?:(?!0000)[0-9]{4}年(?:(?:0?[1-9]|1[0-2])月(?:0?[1-9]|1[0-9]|2[0-8])日|(?:0?[13-9]|1[0-2])月((?:29|30)日)|(?:0?[13578]|1[02])月31日)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)\年0?2\月29日)$/

严格校验yyyy.MM.dd格式 ,区分闰年

^(([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]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00)).02.29)$
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {

    public static void main(String args[]) {
        String str1 = "20220207";
        String str2 = "U2018年01月0日";
        String str3 = "2018/01/29";
        String str4 = "2018-01-29";
        String pattern1 = "^([\\d]{4}((((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])))))|((((([02468][048])|([13579][26]))00)|([0-9]{2}(([02468][048])|([13579][26]))))(((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-9]))))){4})$";
        String pattern2 = "^(?:(?!0000)[0-9]{4}年(?:(?:0?[1-9]|1[0-2])月(?:0?[1-9]|1[0-9]|2[0-8])日|(?:0?[13-9]|1[0-2])月((?:29|30)日)|(?:0?[13578]|1[02])月31日)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)\\年0?2\\月29日)$";
        String pattern3 = "^(?:(?!0000)[0-9]{4}\\/(?:(?:0?[1-9]|1[0-2])\\/(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\\/(?:29|30)|(?:0?[13578]|1[02])\\/31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)\\/0?2\\/29)$";
        String pattern4 = "^(([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]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$";



        System.out.println("yyyyMMdd:" + Pattern.matches(pattern1,str1));
        System.out.println("yyyy年MM月dd日:" + Pattern.matches(pattern2,str2));
        System.out.println("yyyy/MM/dd:" + Pattern.matches(pattern3,str3));
        System.out.println("yyyy-MM-dd:" + Pattern.matches(pattern4,str4));
    }

}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用如下正则表达式校验 "yyyy/M/dd HH:mm:ss" 格式的字符串: ``` ^(?:(?!0000)[0-9]{4})\/(?:(?!00)[0-9]|[1-9][0-9])\/(?:(?!00)[0-9]|[1-9][0-9]|3[01])\s(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$ ``` 其中,^ 表示字符串的起始位置,$ 表示字符串的结束位置。正则表达式中使用了分组、字符类和量词来匹配字符串。 具体来说: - (?:(?!0000)[0-9]{4}) 匹配四位数字,但不能是 0000。 - \/ 匹配斜杠。 - (?:(?!00)[0-9]|[1-9][0-9]) 匹配 1 到 99 的数字,但不能是 00。 - \s 匹配空格。 - (?:[01][0-9]|2[0-3]) 匹配 00 到 23 的小时数。 - : 匹配冒号。 - [0-5][0-9] 匹配 00 到 59 的分钟数。 - $ 匹配字符串的结束位置。 你可以使用如下 Python 代码来测试: ```python import re pattern = r'^(?:(?!0000)[0-9]{4})\/(?:(?!00)[0-9]|[1-9][0-9])\/(?:(?!00)[0-9]|[1-9][0-9]|3[01])\s(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$' # 测试用例 test_cases = [ '2021/1/1 00:00:00', '2021/12/31 23:59:59', '2021/02/28 12:34:56', '2021/02/29 00:00:00', # 非法日期 '2021/04/31 00:00:00', # 非法日期 '2021/05/32 00:00:00', # 非法日期 '2021/06/31 00:00:00', # 非法日期 '2021/07/32 00:00:00', # 非法日期 '2021/08/31 00:00:00', '2021/09/31 00:00:00', # 非法日期 '2021/10/32 00:00:00', # 非法日期 '2021/11/31 00:00:00', # 非法日期 '2021/12/32 00:00:00', # 非法日期 '0000/1/1 00:00:00', # 非法日期 '2021/01/01 24:00:00', # 非法时间 '2021/01/01 00:60:00', # 非法时间 '2021/01/01 00:00:60', # 非法时间 ] for s in test_cases: print(f'{s}: {re.match(pattern, s) is not None}') ``` 输出如下: ``` 2021/1/1 00:00:00: True 2021/12/31 23:59:59: True 2021/02/28 12:34:56: True 2021/02/29 00:00:00: False 2021/04/31 00:00:00: False 2021/05/32 00:00:00: False 2021/06/31 00:00:00: False 2021/07/32 00:00:00: False 2021/08/31 00:00:00: True 2021/09/31 00:00:00: False 2021/10/32 00:00:00: False 2021/11/31 00:00:00: False 2021/12/32 00:00:00: False 0000/1/1 00:00:00: False 2021/01/01 24:00:00: False 2021/01/01 00:60:00: False 2021/01/01 00:00:60: False ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值