我的第一个问题,我很兴奋......自从上线以来我一直潜伏着并热爱这个网站,不过我为任何新手错误,格式化等道歉...
我正在尝试验证包含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;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经编程了大约10年但是对Java非常新,所以请随意解释任何你认为合适的基本内容.
(0 [1-9] | [1-9] | [12] [0-9] | 3 [01])
第二种情况,[1-9],看起来是成功的部分,因为你没有测试字符串的结尾.
这是匹配1999-12-3,而不是1999-12-33
| 归档时间: |
|
| 查看次数: |
8248 次 |
| 最近记录: |