问题描述
只是判断一个字符串是不是以“yyyy-mm-dd”的格式输入的我写了一个貌似不对"[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}"[b][/b]问题补充:String[] dataArr5 = { "1984-10-20", "2008-03-12", "boon", "buin" ,"bynn"}; for (String str5 : dataArr5) { String patternStr="^((((19){1}|(20){1})d{2})|d{2})[-\s]{1}[01]{1}d{1}[-\s]{1}[0-3]{1}d{1}$"; boolean result5 = Pattern.matches(patternStr, str5); if (result) { System.out.println("字符串"+str5+"匹配模式"+patternStr+"成功"); } else{ System.out.println("字符串"+str5+"匹配模式"+patternStr+"失败"); } 怎么结果都是失败阿我是个初学者没学过正则表达式谢谢了
解决方案
这个应该行了 String patternStr = "^((((19){1}|(20){1})(\d){2})|(\d){2})[-\s]{1}[01]{1}(\d){1}[-\s]{1}[0-3]{1}(\d){1}$";
解决方案二:
唔。。。这个是判断XXXX-XX-XX 或 XXXX XX XX 或 XXXX-X-X格式的正则,不好意思,看错了,按上面的改,应该没问题了
解决方案三:
这个也有问题。。。。。。他的月份和日期check的还是不完善。。。。
解决方案四:
d{2}这个有问题,是指字符d
解决方案五:
对不起, 我试了下,的确有问题!你可以参考下java.util.regex.Pattern的JavaDoc将这个正则改一下, 上面介绍的很详细!
解决方案六:
测试了一把, 能匹配比较正规的日期public void testRegex() {assertTrue(Pattern.compile("[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}").matcher("2008-08-08").matches());assertFalse(Pattern.compile("[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}").matcher("a008-08-08").matches());assertTrue(Pattern.compile("[0-9]{4}-[0-9]{2}-[0-9]{2}").matcher("2008-08-08").matches());assertFalse(Pattern.compile("[0-9]{4}-[0-9]{2}-[0-9]{2}").matcher("a008-08-08").matches());}但显然不够严密, 贴一个由不知名的仁兄贡献的日期正则:/** * 匹配日期 <br> * * 格式(首位不为0): XXXX-XX-XX 或 XXXX XX XX 或 XXXX-X-X <br> * * 范围:1900--2099 <br> * * 匹配 : 2005-04-04 <br> * * 不匹配: 01-01-01 * */public static final String date_regexp = "^((((19){1}|(20){1})d{2})|d{2})[-\s]{1}[01]{1}d{1}[-\s]{1}[0-3]{1}d{1}$";// 匹配日期