簡體   English   中英

使用正則表達式格式化日期

[英]Using Regular Expression to Format Date

我正在嘗試使用以下代碼確保日期在 YYYY-MM-DD 中:

var exp = \d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01]);

for(i=0; i<array.length; i++)
    if(!exp.test(array[i].value)
        //do something 

我目前所擁有的無法正常工作,我的 if 語句的內容沒有執行,這使我相信我的 if 語句設置錯誤或正則表達式錯誤,我被困在它上面,無法弄清楚

您的正則表達式將允許無效日期。 以下是測試方法

 const isDate = dString => { const [yyyy, mm, dd] = dString.split("-"); let d = new Date(yyyy, mm - 1, dd, 15, 0, 0, 0); // handling DST return d.getFullYear() === +yyyy && // casting to number d.getMonth() === mm - 1 && d.getDate() === +dd; } const arr = ["2019-01-01", "2019-02-29"] arr.forEach(dString => console.log(isDate(dString)))

我不檢查你的正則表達式,但你應該把它放在//之間 - 但是對於日期驗證正則表達式不是好工具 - 例如案例2019-02-29是無效的......但你可以使用它進行初始格式檢查,例如

 let dateString = "2019-05-14"; let [d,year,month,day]= dateString.match(/(\\d{4})-(\\d{2})-(\\d{2})/)||[] if(d) { // here make deeper validation console.log({year,month,day}) } else { console.log('invalid'); }

您沒有正確聲明您的正則表達式。 你需要使用/regex/ 此外,您正在測試您的字符串是否不匹配,您可能想要確保這是您真正想要的。

 var exp = /\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])/; let dateString = "2019-05-40"; if(!exp.test(dateString)) { console.log('not matching'); }

正如你提到的你想要日期格式yyyy-mm-dd你可以使用波紋管regex

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

 var exp = /([12]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01]))/; let yourDate= "2018-09-26"; if(exp.test(yourDate)) { console.log('Date Formated!'); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM