gpt4 book ai didi

java - Java 日期验证的正则表达式

转载 作者:行者123 更新时间:2023-12-01 13:52:40 25 4
gpt4 key购买 nike

正在使用正则表达式检查日期验证,它对日期有效但不适用于年份? .请帮我解决这个问题。

输出:

false
true
false
true

预期输出:

false
false
false
false


public static void main(String args[])
{
System.out.println(dateFormatValidate("ddMMyyyy","^(0?[1-9]|[12][0-9]|3[01])(0?[1-9]|1[012])((19|20)\\d\\d)?", "08s21988"));
System.out.println(dateFormatValidate("ddMMyyyy","^(0?[1-9]|[12][0-9]|3[01])(0?[1-9]|1[012])((19|20)\\d\\d)?", "08021s88"));
System.out.println(dateFormatValidate("ddMMyyyy","^(0?[1-9]|[12][0-9]|3[01])(0?[1-9]|1[012])((19|20)\\d\\d)?", "s8021988"));
System.out.println(dateFormatValidate("ddMMyyyy","^(0?[1-9]|[12][0-9]|3[01])(0?[1-9]|1[012])((19|20)\\d\\d)?", "0802198s"));
}
public static boolean dateFormatValidate(String format, String regex, String value) {
try {
if (value != null && !"".equals(value.trim()) && format != null && !"".equals(format.trim()))
{
if ((regex != null && !"".equals(regex.trim()) && Pattern.matches(regex, value)) || regex != null || "".equals(regex))
{
SimpleDateFormat dformat = new SimpleDateFormat(format);
dformat.setLenient(false);
dformat.parse(value);
return true;
} else
return false;
} else
return false;
} catch (Exception e) {
return false;
}
}

最佳答案

@sunleo 我认为这与您的正则表达式没有任何关系,因为我刚刚在您提供的这四个日期上尝试了您的模式,但它没有捕获其中的任何一个。

我想说错误就在这个if中:

if ((regex != null && !"".equals(regex.trim()) && Pattern.matches(regex, value)) || regex != null || "".equals(regex)) 
{
// your code
}
<小时/>

对于您在ma​​in中提供的情况:

regex != null - 所有情况true

!"".equals(regex.trim()) - 所有情况true

Pattern.matches(regex, value)) - 所有情况false

regex != null - 所有情况true

"".equals(regex)) - 所有情况false

<小时/>

这给了我们以下如果:

if ((true AND true AND false) OR true OR false> )

这与:

相同

如果()

在所有情况下给出:

<小时/>

正确

那么为什么你仍然设法得到两个错误输出呢?可能这里抛出了异常:

SimpleDateFormat dformat = new SimpleDateFormat(format);
dformat.setLenient(false);
dformat.parse(value);

因此,在您的 catch 语句中,将 return false 更改为 e.printStackTrace();

我的建议是首先重新排列这个特定的if,然后检查它是否有应该为假的情况(在本例中是所有情况)。怎么办?

首先重新排列if,然后我将开始调试并检查if组件以查看它们的值以及它们是否计算正确。

另外,我认为正则表达式根本不正确(即使它不是错误输出的原因),如果您始终使用 ddMMyyyy 格式并且仅使用 19xx/20xx 年,请尝试以下模式:

^(0[1-9]|[1-2][0-9]|3[0-1])(0[1-9]|1[0-2])(19|20)\d{2}$
<小时/>

注意

我没有通过任何 IDE 检查这些内容(正则表达式除外),因为我这里没有。

关于java - Java 日期验证的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19853906/

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