4

日付の場合、文字列を検証するためのリンクがたくさん見つかりました。

ここここのように。

しかし、とにかく、次のものがあるかどうかを検証する方法がわかりません。

6/6/2012最初の6は月、次の 6は日

また、ユーザーが次のように入力した場合:

2012/06/06

適切な方法でそれを行う方法の手がかりはありますか?

ありがとう!!

4

2 に答える 2

20

ここでは、これは 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)

}
于 2012-06-27T01:40:23.553 に答える
5

正規表現を使用します。

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のミッションクリティカルコードではこれを使用しないでください。

于 2012-06-27T01:51:02.840 に答える