为什么这个数据YYYY-MM-DD正则表达式在Java中失败?
发布时间:2020-12-13 22:55:28 所属栏目:百科 来源:网络整理
导读:我的第一个问题和我激动…我已经潜伏了,因为活着和爱网站,但是我为任何新手错误,格式化等道歉… 我试图验证包含Java日期的字符串字段的格式.我们将在字符串中收到日期,我将验证其格式,然后将其解析为真实的Date对象.传入的格式是YYYY-MM-DD格式.但是,如果我
我的第一个问题和我激动…我已经潜伏了,因为活着和爱网站,但是我为任何新手错误,格式化等道歉…
我试图验证包含Java日期的字符串字段的格式.我们将在字符串中收到日期,我将验证其格式,然后将其解析为真实的Date对象.传入的格式是YYYY-MM-DD格式.但是,如果我通过了“1999-12-33”测试,那么测试将会失败(与日期数字33相同),这种不完整的模式: ((19|20)d{2})-([1-9]|0[1-9]|1[0-2])-([12][0-9]|3[01]) 但是,一旦我在下面加粗的字符通过测试(但不应该) ((19|20)d{2})-([1-9]|0[1-9]|1[0-2])-(0[1-9]|[1-9]|[12][0-9]|3[01]) *附加注意事项,我知道我可以将0 [1-9] | [1-9]改为0?[1-9],但是我想将所有内容都切换成最简单的格式,试图找出为什么这不是’工作 以下是我通过所有不同日期方案运行的废品测试: import java.util.regex.Matcher; import java.util.regex.Pattern; public class scrapTest { public scrapTest() { } public static void main(String[] args) { scrapTest a = new scrapTest(); boolean flag = a.verfiyDateFormat("1999-12-33"); } private boolean verfiyDateFormat(String dateStr){ Pattern datePattern = Pattern.compile("((19|20)d{2})-([1-9]|0[1-9]|1[0-2])-(0[1-9]|[1-9]|[12][0-9]|3[01])"); Matcher dateMatcher = datePattern.matcher(dateStr); if(!dateMatcher.find()){ System.out.println("Invalid date format!!! -> " + dateStr); return false; } System.out.println("Valid date format."); return true; } } 我已经编程了?10年,但对Java来说非常新鲜,所以请随便解释一下你认为合适的一切.
我认为这是因为你使用dateMatcher.find()而不是dateMatcher.matches().前者寻找一个匹配,后者尝试匹配整个字符串.看到
API page.所以基本上33中的前3位将会匹配您刚加入的[1-9],第二个3将不匹配任何东西,但是该方法仍然返回true.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – 异步应用服务器与多个阻止服务器
- 你怎么知道.net调用使用了哪个tnsnames.ora文件?
- Express的路由详解
- lbjson2,比fastjson更轻量级,更快的json解析库
- 单元测试 – 在测试该API的包装器时,我的单元测试是否应该直
- ruby-on-rails – Rails:如何测试before_save回调
- objective-c – (xcode 5)ibtool失败,退出代码为255
- 【Cocos2dx】利用导演类、场景类完成重新开始游戏、暂停游戏
- ACE_Reactor的各种handle_*挂钩方法返回值意义和设计原则(
- ruby-on-rails – 什么是最好的Ruby视频/截屏视频?