[英]Regex for Java Date validation
我是否正在使用正則表達式檢查日期的有效性,但不適用於Year? 請幫助我解決這個問題。
輸出:
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
}
在您提供的主要情況下:
regex != null
所有情況都為true
!"".equals(regex.trim())
-所有情況為true
Pattern.matches(regex, value))
-所有情況均為假
regex != null
所有情況都為true
"".equals(regex))
-所有情況均為假
在以下情況下,我們可以得到以下結果:
如果(( true AND true AND false )OR true OR false )
與以下內容相同:
如果( false或true或false )
在所有情況下都可以:
真正
那么,為什么仍然設法得到兩個錯誤的輸出呢? 可能在這里引發了異常:
SimpleDateFormat dformat = new SimpleDateFormat(format);
dformat.setLenient(false);
dformat.parse(value);
因此,在您的catch
語句更改中, return false
給e.printStackTrace();
。
同樣,我的建議是, 如果要先重新排列此特定內容,然后再檢查應該為假的情況(在此示例中為所有情況)。 怎么樣?
首先重新排列,然后從調試開始,檢查是否有組件以查看其值以及是否正確計算了它們。
同樣,我認為正則表達式根本不正確(即使這不是導致錯誤輸出的原因),如果您始終使用ddMMyyyy格式且只有19xx / 20xx年,請嘗試以下模式:
^(0[1-9]|[1-2][0-9]|3[0-1])(0[1-9]|1[0-2])(19|20)\d{2}$
注意
我沒有通過任何IDE檢查過任何此項(正則表達式除外),因為我在這里沒有任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.