java-搜索信用卡到期的正则表达式,该正则表达式还检查年份是否在过去
我正在搜索一个可以在java中使用的正则表达式/函数,这样我就知道给定的MM/YYYY如果年份是过去的,那么它将无法通过验证 到目前为止,我有:java-搜索信用卡到期的正则表达式,该正则表达式还检查年份是否在过去,java,regex,validation,Java,Regex,Validation,我正在搜索一个可以在java中使用的正则表达式/函数,这样我就知道给定的MM/YYYY如果年份是过去的,那么它将无法通过验证 到目前为止,我有: (0[1-9]|10|11|12)/20[1-9]{2} 但正如你所见,这意味着201*仍然有效。因此,2015年将是有效的,等我想从今年起将是有效的。过去的任何一年都不应有效。如何执行此操作?您可以使用LocalDate: 或更基本的元素操作: String date ="04/2012"; boolean past = Integer.parse
(0[1-9]|10|11|12)/20[1-9]{2}
但正如你所见,这意味着201*仍然有效。因此,2015年将是有效的,等我想从今年起将是有效的。过去的任何一年都不应有效。如何执行此操作?您可以使用LocalDate:
或更基本的元素操作:
String date ="04/2012";
boolean past = Integer.parseInt(date.split("/")[1]) < LocalDate.now().getYear();
System.out.println(past); // true
All将返回一个布尔值,就像使用一个正则表达式来告诉您是否匹配一样
regex的问题在于,您每年都会重新考虑模式,而且如果详细说明2017年接受的int值,而不是2016年接受的int值,这将是不好的一般来说,我不建议在没有必要的情况下使用regex,但我能想到的最佳答案是这样做:
(0[1-9]|10|11|12)/201[7-9]|202[0-9]
请注意,验证仅在年份进行,类似2017年1月这样的日期才有效。如果你想解决这个问题,你必须在2017年的前一个月有一个案例
另外,我真的建议使用@azro建议的LocalDate。而不是使用Luhn算法和日期/时间APIx为什么人们坚持在不合适的地方使用正则表达式?将元素解析为LocalDate,然后检查年份是在当前年份之前还是之后,更好。。。java.time.YearMonth.如何获取当前年份?
(0[1-9]|10|11|12)/201[7-9]|202[0-9]