2017-08-31 1081 views
0

進出口試圖以JavaScript創建正則表達式模式以驗證日期時間格式YYYY-MM-DD HH:日期時間正則表達式模式匹配YYYY-MM-DD HH:MM:SS格式

/([0-2][0-9]{3})\-([0-1][0-9])\-([0-3][0-9]) ([0-5][0-9])\:([0-5][0-9])\:([0-5][0-9])(([\-\+]([0-1][0-9])\:00))/ 

此處SS:毫米是jsfiddle

但是當我測試它反對這個日期時間2017年8月31日1時22分34秒 任何人可以幫助我知道什麼是錯在我的模式 謝謝

+0

請點擊'<''並創建一個[mcve] - 但也許google首先? – mplungjan

+0

雖然它是一個很好的實驗,可以用於regEx,但如果您使用經過嚴格測試的庫爲您執行此操作,那麼執行日期解析會更好,更準確。 moment.js - > https://momentjs.com/彈出想法, – Keith

回答

2

它不工作的例子這是因爲模式curre當然需要,而不是使可選的時區修飾符,它不在您給出的示例日期中。

更改最後部分:

(([\-\+]([0-1][0-9])\:00))? 

另外:

  • 您小時子組匹配0-59,而不是0-23。
  • 你正在逃避一些你不需要的東西,例如:-
  • 該模式允許無效日期例如39作爲一天。

修訂:

/^([0-2][0-9]{3})\-(0[1-9]|1[0-2])\-([0-2][0-9]|3[0-1]) ([0-1][0-9]|2[0-3]):([0-5][0-9])\:([0-5][0-9])(([\-\+]([0-1][0-9])\:00))?$/ 

注意這將不考慮在某些月份如invlaid日期2月30日。這意味着要麼使模式更復雜,要麼使用比REGEX更適合日期驗證的東西。

+0

樂意幫忙.. – Utkanos

+0

@ahmdabos也不是我,但一個原因可能是@mplugjam說的。 '請點擊<>並創建一個最小,完整和可驗證的例子。這樣做對你來說很容易,並且會讓SO成員更容易提供幫助。 – Keith

+0

這還有問題,當我測試2017-08-31 01:22:34aaaa(加字符到時間結束)其通過但錯誤它不應該通過測試 – ahmdabos

0

這是因爲這應該是可選的(([\-\+]([0-1][0-9])\:00))?

這裏的最後一部分是一個演示

var a = /([0-2][0-9]{3})-([0-1][0-9])-([0-3][0-9]) ([0-5][0-9]):([0-5][0-9]):([0-5][0-9])(([\-\+]([0-1][0-9])\:00))?/; 
 

 
console.log('2017-08-31 01:22:34'.match(a))

順便說一句,你沒有逃跑:-只有在括號內使用時才應該轉義[]