2016-08-16 24 views
0
私は dd/mm/yyyydd.mm.yyyydd-mm-yyyyを検証するために、この正規表現を持っている

に日付を検証することはできません、今 https://regex101.com/r/oF6zB5/1正規表現は、28から31

私は連結しようとしています https://regex101.com/r/rD9yM8/1

dd/mm/yyyy hh:mmdd.mm.yyyy hh:mmdd-mm-yyyy hh:mmを検証するための上記の式しかし、私は奇妙なエラーが...私は28/mm/yyyy 00:00から31/mm/yyyy 00:00の日付を検証することはできません!

誰かが問題の原因を調べるのに手伝ってください。

+0

'31/02/2016 00は、必要があります。有効な日付も00? – anubhava

+0

Mm ...いいえ...有効な日付であってはなりません。実際には、ここで '31/02/2016'を試してみると:https://regex101.com/r/kO4rR8/1それは検証されません、私は' 31/02/2016 00と同じ結果を期待していました:00 'も。 – wizzy

+0

https://regex101.com/r/kO4rR8/1の正規表現は、有効な29/02/2016を受け入れないため、正しくありません。正規表現はあまりにも複雑すぎます。あなたは本当にそれにもっと多くのロジックを追加したくありません。 – Arjan

答えて

3

正規表現は日付検証のための最善の策ではありません。あなたの日付を検証する非常に良い方法は、moment.jsを使用しています。彼らはそれをサポートしています。

function valiDate(ds) { 
    let validDates = ["DD/MM/YYYY hh:mm", "DD.MM.YYYY hh:mm", "DD-MM-YYYY hh:mm"]; 
    return validDates.some(d => moment(ds, d).isValid()) 
} 

console.log(valiDate("15.02.1985")); 
console.log(valiDate("29.02.1985")); 
console.log(valiDate("29.02.1985 00:00")); 

上記はとし、時間なしの両方が検証されます - あなただけの日付(1985年2月15日)を渡した場合、それはあまりにも、正しく検証します。

DEMO