Java 上的正则表达式日期格式验证

新手上路,请多包涵

我只是想知道是否有一种方法(可能使用正则表达式)来验证 Java 桌面应用程序上的输入是否完全是格式为:“YYYY-MM-DD”的字符串。

原文由 Sheldon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 449
2 个回答

使用以下正则表达式:

 ^\d{4}-\d{2}-\d{2}$

如在

if (str.matches("\\d{4}-\\d{2}-\\d{2}")) {
    ...
}

使用 matches 方法,锚点 ^$ (分别是字符串的开头和结尾)隐式存在。

上面的模式检查与日期的一般“形状”是否一致,但它会接受比有效日期更多的无效日期。您可能会惊讶地发现检查有效日期 - 包括闰年! — 可以 使用正则表达式,但不建议使用。借用 Kuldeep 其他地方的回答,我们都可以为坚持不懈地找到乐趣和钦佩。

 ((18|19|20)[0-9]{2}[\-.](0[13578]|1[02])[\-.](0[1-9]|[12][0-9]|3[01]))|(18|19|20)[0-9]{2}[\-.](0[469]|11)[\-.](0[1-9]|[12][0-9]|30)|(18|19|20)[0-9]{2}[\-.](02)[\-.](0[1-9]|1[0-9]|2[0-8])|(((18|19|20)(04|08|[2468][048]|[13579][26]))|2000)[\-.](02)[\-.]29

在生产环境中,您的同事会喜欢更直接的实施。请记住,优化的第一条规则是不要!

原文由 Greg Bacon 发布,翻译遵循 CC BY-SA 4.0 许可协议

您需要的不仅仅是 regex ,例如“9999-99-00”不是有效日期。有一个 SimpleDateFormat 类是为执行此操作而构建的。更重量级,但更全面。

例如

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

boolean isValidDate(string input) {
     try {
          format.parse(input);
          return true;
     }
     catch(ParseException e){
          return false;
     }
}

不幸的是, SimpleDateFormat 既是重量级的又不是线程安全的。

原文由 Steve B. 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题