日付の場合、文字列を検証するためのリンクがたくさん見つかりました。
しかし、とにかく、次のものがあるかどうかを検証する方法がわかりません。
6/6/2012最初の6は月、次の 6は日
また、ユーザーが次のように入力した場合:
2012/06/06
適切な方法でそれを行う方法の手がかりはありますか?
ありがとう!!
日付の場合、文字列を検証するためのリンクがたくさん見つかりました。
しかし、とにかく、次のものがあるかどうかを検証する方法がわかりません。
6/6/2012最初の6は月、次の 6は日
また、ユーザーが次のように入力した場合:
2012/06/06
適切な方法でそれを行う方法の手がかりはありますか?
ありがとう!!
ここでは、これは 4 桁の年と任意の区切り文字を含む任意の日付形式で機能するはずです。日付などを検証するプラグインの理想的なフォームから抽出しました。
var isValidDate = function (value, userFormat) {
var
userFormat = userFormat || 'mm/dd/yyyy', // default format
delimiter = /[^mdy]/.exec(userFormat)[0],
theFormat = userFormat.split(delimiter),
theDate = value.split(delimiter),
isDate = function (date, format) {
var m, d, y
for (var i = 0, len = format.length; i < len; i++) {
if (/m/.test(format[i])) m = date[i]
if (/d/.test(format[i])) d = date[i]
if (/y/.test(format[i])) y = date[i]
}
return (
m > 0 && m < 13 &&
y && y.length === 4 &&
d > 0 && d <= (new Date(y, m, 0)).getDate()
)
}
return isDate(theDate, theFormat)
}
正規表現を使用します。
var dateRegEx = /^(0[1-9]|1[012]|[1-9])[- /.](0[1-9]|[12][0-9]|3[01]|[1-9])[- /.](19|20)\d\d$/
console.log("06/06/2012".match(dateRegEx) !== null) // true
console.log("6/6/2012".match(dateRegEx) !== null) // true
console.log("6/30/2012".match(dateRegEx) !== null) // true
console.log("30/06/2012".match(dateRegEx) !== null) // false
@elclanrsが指摘したように、これは文字列の形式のみを検証し、実際の日付は検証しません。つまり、2月31日のような日付が通過します。ただし、OPは「日付文字列形式の検証」のみを要求するため、必要なのはそれだけである可能性があるため、ここでこの回答を保持します。
注意として、OPが使用していたjQuery Validationプラグインも、フォーマットのみを検証します。
最後に、フォーマットだけでなく日付を検証する必要がある場合、この正規表現の失敗率は(1-12)/(1-31)/(1900- 2099)日付文字列。JPLのミッションクリティカルコードではこれを使用しないでください。