-2

yyyy-dd-mm で日付形式を検証しようとしています。以下のバリデーターmatodでこれを試しています。/^(\d{4})(-)(\d{1,2})(-)(\d{1,2})$/正規表現を使用して日付を検証しています。それを使用して検証しようとすると、うまくいき/^((?:19|20)\d\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/ません。

jQuery.validator.addMethod(
"validateDateFormat",
function(value, element) {
    var currVal = value;
    if (currVal != '') {
        var rxDatePattern = /^(\d{4})(-)(\d{1,2})(-)(\d{1,2})$/;
        //var rxDatePattern = /^((?:19|20)\d\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/;
        var dtArray = currVal.match(rxDatePattern);
        if (dtArray == null){

               return false;
        }
        dtYear = dtArray[1];
        dtMonth= dtArray[3];
        dtDay = dtArray[5];

        if (dtMonth < 1 || dtMonth > 12)
            return false;
        else if (dtDay < 1 || dtDay > 31)
            return false;
        else if ((dtMonth == 4 || dtMonth == 6 || dtMonth == 9 || dtMonth == 11) && dtDay == 31)
            return false;
        else if (dtMonth == 2)
        {
            var isleap = (dtYear % 4 == 0 && (dtYear % 100 != 0 || dtYear % 400 == 0));
            if (dtDay > 29 || (dtDay == 29 && !isleap))
                    return false;
        }
    }

    return true;
},
     "Please enter a valid date, date format should be (yyyy-mm-dd)."
);

ここで検証しようとしていること:

  1. int と "-" のみ使用できます。
  2. 日付は、YYYY-MM-DD 形式でのみ使用できます。
  3. YYYY は 1900 より大きく、4 整数である必要があります。
  4. MM は 01 から 12 の間で、2 文字である必要があります。
  5. DD は 01 から 31 の間で、2 文字である必要があります。
4

1 に答える 1

2

正規表現は、数値処理を行うようには設計されていません。

複雑にしないでおく。正規表現を使用して基本パターンと照合し、関連するトークンを抽出してから、取得した数値に数値およびその他のビジネス ルールを適用します。後でこれを維持する必要がある場合は、自分に感謝します。

于 2013-05-30T06:24:28.867 に答える