[b]只是判断一个字符串是不是以“yyyy-mm-dd”的格式输入的
我写了一个貌似不对
"[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}"[b][/b][/b]
[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}$";
测试了一把, 能匹配比较正规的日期
[code="java"]
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());
}
[/code]
但显然不够严密, 贴一个由不知名的仁兄贡献的日期正则:
[code="java"]
/**
* 匹配日期
*
* 格式(首位不为0): XXXX-XX-XX 或 XXXX XX XX 或 XXXX-X-X
*
* 范围:1900--2099
*
* 匹配 : 2005-04-04
*
* 不匹配: 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}$";// 匹配日期
[/code]
对不起, 我试了下,的确有问题!
你可以参考下java.util.regex.Pattern的JavaDoc将这个正则改一下, 上面介绍的很详细!
d{2}这个有问题,是指字符d
这个也有问题。。。。。。他的月份和日期check的还是不完善。。。。
唔。。。这个是判断XXXX-XX-XX 或 XXXX XX XX 或 XXXX-X-X格式的正则,不好意思,看错了,按上面的改,应该没问题了