-1

我使用类模式 (java.util.regex.Pattern) 的简单知识编写了这段代码。当然,对于从0000-00-00to的所有真实日期,它都会返回 true 9999-12-31。但不幸的是,对于 , ,它仍然返回 true 2013-22-01,2013-01-99。. 。ETC。帮助我正确验证它。

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();
4

5 回答 5

1

虽然使用 DateFormat 会非常优越但这会让你指向正确的方向。

([0-9]){4}(-[0-1][1-2]-([0-2][1-9]|3[0-1]))Debuggex 解释了什么,但这里是快速而肮脏的运行。

  • 允许四组数字 0-9。
  • 提供隐式破折号。
  • 允许一组 0 或 1。
  • 允许1-2人一组。
  • 提供隐式破折号。
  • 任何一个:
    • 允许一组数字 0-2 和 1-9,或
    • 允许一组隐含的 3 和 0-1。

你会在二月得到有趣的约会,但总的来说,这会让你朝着正确的方向前进。再多一点正则表达式技巧,您就可以涵盖所有月份和闰年。

于 2013-03-05T03:54:32.507 回答
0

使用这个正则表达式

String reg = "\\^(19|20)\\d\\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$";

参考

于 2013-03-05T03:56:38.010 回答
0

注意:我假设由于某种原因你不能使用DateFormat类,这是匹配日期格式的最简单的方法。

一种方法是提供可以匹配的事物列表。例如,对于您想要“0 和 1 到 9 的数字”或“1 和 0 到 2 的数字”的月份

这将是这样完成的(仅在几个月内):

(0[1-9]|1[0-2])

这应该让您了解如何完成您的正则表达式。

不幸的是,对于这些日子来说,它更加复杂,因为天数因一天而异。应该做的只是匹配 2 个整数,然后使用Matcher.group(int)方法从匹配器中获取组并手动验证值。

另一种方法是摆脱所有这些,并简单地用String.split(String). 然后你检查你有三个子部分,它们都可以解析为整数,并且它们的值是一致的。但这只是为了好玩:你真的应该使用DateFormat.

于 2013-03-05T03:42:17.750 回答
0

尝试

boolean matches = s.matches("\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])");

可以让它知道每个月有多少天,但不可能让正则表达式知道闰年

于 2013-03-05T04:02:21.780 回答
-1

基于你已经拥有的:

String regex = "([0-9]){4}+([-])?([0-1][0-2])+([-])?([0-2][0-9]|3[0-1])";
于 2013-03-05T03:54:41.450 回答