我使用类模式(java.util.regex.Pattern)的简单知识制作了这段代码。当然,对于从0000-00-00
到9999-12-31
的所有实际日期,它都会返回true。但不幸的是,它仍然适用于2013-22-01,2013-01-99
,. 。 。等等。帮我验证一下。
String regex = "([0-9]){4}+([-])?([0-2]){2}+([-])?([0-9]){2}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(textFieldName.getText());
return matcher.find();
答案 0 :(得分:1)
虽然使用DateFormat将非常优越,但this会让您指向正确的方向。
在Debuggex上解释了([0-9]){4}(-[0-1][1-2]-([0-2][1-9]|3[0-1]))
所做的事情,但这里是快速而又肮脏的问题。
你将获得二月份的有趣日期,但总的来说这会让你朝着正确的方向前进。更多正则表达式技巧,你可以涵盖所有月份和闰年。
答案 1 :(得分:0)
注意:我认为由于某种原因,您无法使用DateFormat
类,这是匹配日期格式最简单的方法。
一种方法是提供可以匹配的事物列表。例如,您想要的月数为" 0和1到9"或" 1的数字以及0到2&#34的数字;
这样就可以完成(仅限于几个月):
(0[1-9]|1[0-2])
这可以让您了解如何完成正则表达式。
不幸的是,在这些日子里,它变得更加复杂,因为天数从一天到另一天不等。应该做的只是匹配2个整数,然后使用Matcher.group(int)
方法从匹配器中取出组,并手动验证该值。
另一种方法是摆脱所有这一切,简单地分开" - "与String.split(String)
。然后你检查你有三个子部分,它们都可以被解析为整数,并且它们的值是一致的。但它只是为了好玩:你应该真的使用DateFormat
。
答案 2 :(得分:0)
使用此正则表达式
String reg = "\\^(19|20)\\d\\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$";
答案 3 :(得分:0)
试
boolean matches = s.matches("\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])");
可以让它知道每个月有多少天,但是让正则表达式意识到闰年是不可能的
答案 4 :(得分:-1)
基于你已经拥有的东西:
String regex = "([0-9]){4}+([-])?([0-1][0-2])+([-])?([0-2][0-9]|3[0-1])";