gpt4 book ai didi

java - 为什么此数据 YYYY-MM-DD 正则表达式在 Java 中失败?

转载 作者:搜寻专家 更新时间:2023-10-30 21:46:28 24 4
gpt4 key购买 nike

我的第一个问题,我很兴奋......自上线以来我一直潜伏并且喜欢这个网站,但是对于任何新手错误,格式等,我深表歉意......

我正在尝试验证包含 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])

However as soon as I add the characters in bold below it passes the test (but should not)

((19|20)\\d{2})-([1-9]|0[1-9]|1[0-2])-(0[1-9]|[1-9]|[12][0-9]|3[01])

*additional note, I know I can change the 0[1-9]|[1-9] into 0?[1-9] but I wanted to break everything down to its most simple format to try and find why this isn't working.

Here is the scrap test I've put together to run through all the different date scenarios:

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。

关于java - 为什么此数据 YYYY-MM-DD 正则表达式在 Java 中失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2508926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com