正则 日期

^((?:(?:1[6-9]|[2-9]\d)?\d{2})(?:((?:0?[13578]|1[02])(?:31))|(?:(?:0?[1,3-9]|1[0-2])(?:29|30)))|((?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))(?:(0)?2(29)))|^(?:(?:1[6-9]|[2-9]\d)?\d{2})(?:(?:0?[1-9])|(?:1[0-2]))(?:0?[1-9]|1\d|2[0-8]))(?:(0?\d|1\d|2[0-4])(?:0?\d|[1-5]\d)(?:0?\d|[1-5]\d)(?:\d{3}))$



此正则可以判断20170105184959222,考虑了闰年

### 回答1: 可以使用以下正则表达式进行日期校验: ^[1-9]\\d{3}([1-9]|1[-2])([1-9]|[12]\\d|3[01])$ 其中,^表示字符串的开头,$表示字符串的结尾。[1-9]\\d{3}表示匹配四位数字,且第一位不能为。([1-9]|1[-2])表示匹配份,开头的为01-09,1开头的为10-12。([1-9]|[12]\\d|3[01])表示匹配日期,开头的为01-09,1或2开头的为10-29,3开头的为30或31。 例如,20191231符合该正则表达式,而20191331不符合。 ### 回答2: Java中可以使用正则表达式日期进行校验,以下是一种简单的实现方式,可以校验格式为yyyymmdd的日期。 首先,定义正则表达式: String regex = "\\d{4}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])"; 其中\d表示匹配数字,{4}表示匹配4个数字,(0[1-9]|1[012])表示匹配份,份可以是01-09或10-12,(0[1-9]|[12][0-9]|3[01])表示匹配日期日期可以是01-09、10-29、30、31。 接下来,使用正则表达式进行校验: String strDate = "20211231"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(strDate); if (matcher.matches()) { System.out.println("日期格式正确"); } else { System.out.println("日期格式错误"); } 其中,strDate表示要校验日期,Pattern.compile(regex)表示将正则表达式编译为一个模式,Matcher matcher = pattern.matcher(strDate)表示通过模式匹配输入的日期,matcher.matches()返回true表示符合正则表达式,也就是日期格式正确。 如果需要校验日期的有效性,可以使用SimpleDateFormat进行转换,例如: SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); try { Date date = dateFormat.parse(strDate); System.out.println("日期格式正确,日期为:" + dateFormat.format(date)); } catch (ParseException e) { System.out.println("日期格式错误"); } 其中,SimpleDateFormat("yyyyMMdd")表示日期的格式,parse(strDate)将字符串转换为日期类型,format(date)将日期类型转换为字符串类型。 以上就是使用Java正则表达式校验yyyymmdd日期的简单实现方式。 ### 回答3: Java正则表达式可以用来验证日期格式是否符合指定的格式。我们可以使用以下代码来验证日期格式是否为"yyyymmdd": ```java public boolean isValidDate(String date) { String pattern = "\\d{8}"; if (date.matches(pattern)) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); sdf.setLenient(false); try { sdf.parse(date); return true; } catch (ParseException e) { return false; } } else { return false; } } ``` 其中,正则表达式"\\d{8}"表示匹配8个数字。如果日期字符串符合8位数字的要求,则使用SimpleDateFormat类将其解析为日期。设置setLenient(false)的目的是禁止表示解析中出现的任何不一致,比如"20211232"这样的不合法日期。 此外,我们还可以使用DateTimeFormatter类来验证日期格式。以下是使用DateTimeFormatter的示例代码: ```java public boolean isValidDate(String date) { String pattern = "yyyyMMdd"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); try { LocalDate.parse(date, formatter); return true; } catch (DateTimeParseException e) { return false; } } ``` 使用DateTimeFormatter的好处是,它能够检测非法的份,如输入了"20211301"则编译不通过,而使用SimpleDateFormat则会默认转换为2022-01-01。因此,我们建议在Java中使用DateTimeFormatter类来验证日期格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值