3

2 つの日付フィールド ( tofrom) があり、それらを検証する必要があるという要件があります。

  • mm/dd/yyyy 形式かどうか
  • 両方の日付が特定の範囲内にある
  • 名前が示すように、to常により大きくする必要がありますfrom
  • これらのいずれかを入力するとすぐに、両方のフィールドが必須になります

同じものを実装する最良の方法は何ですか、jquery検証APIを使用しています

注: jQuery Date Validation (YYYY-MM-DD) のようなリンクのいくつかでフォーマットの検証について読みましたが、これらは有効な日付であることを保証しません。02/31/2999

私は試した

jQuery.validator.addMethod("DateFormat", function(value, element) {
    var date_regex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/ ;
    var values = value.split("/");
    return this.optional(element) || (value.test(date_regex) && (new Date(values[2], values[0], values[1])));
});
4

2 に答える 2

2

私たちはこの問題をほぼ正確に処理しました。一連の検証ルールを作成する必要があります。まず、日付にある種の適切なクラス属性を与えます。たとえば、「fromDate」と「toDate」です。

  • 正規表現を使用して正しい形式であることを確認するもの
  • javascript Date オブジェクトを使用して日付を変換し、それらが正しい範囲にあることを確認します。
  • 開始日用の 1 つは、終了日を見つける方法を知っています (通常、レベルを 1 つまたは 2 つ上げてから、実行.find('input.toDate'))または同様の方法で処理し、それらを比較します。
  • 日付を逆にした別の例。
  • 両方が空の場合は true を返しますが、一方が空で他方がいっぱいの場合は false を返します。

次に、適切なルールを適切なクラスに割り当てますjQuery.validate.addClassRules()

問題のフォームにバリデーターを設定する前に、そのすべてのコードを配置すると、問題なく動作するはずです。構文は、読者の演習として残されています。

于 2013-06-14T02:17:48.323 に答える
0

次の検証方法を追加

// jquery validation method to validate date format
jQuery.validator.addMethod("DateFormat", function(value, element) {
    var date_regex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/ ;
    var comp = value.split('/');
    var m = parseInt(comp[0], 10);
    var d = parseInt(comp[1], 10);
    var y = parseInt(comp[2], 10);
    var date = new Date(y,m,d);
    return this.optional(element) || (date_regex.test(value) && date.getFullYear() == y && date.getMonth() == m && date.getDate() == d);
});
//jquery validation method to validate date range
jQuery.validator.addMethod("DateToFrom", function(value, element, arg0, arg1) {
    var comp = value.split('/');
    var m = parseInt(comp[0], 10);
    var d = parseInt(comp[1], 10);
    var y = parseInt(comp[2], 10);
    var currentEltdate = new Date(y,m,d);

    comp = $("#"+arg0).val().split('/');
    m = parseInt(comp[0], 10);
    d = parseInt(comp[1], 10);
    y = parseInt(comp[2], 10);
    var otherEltDate = new Date(y,m,d);

    var lowerDate, upperDate;
    if(arg1 == true){//current element should be lower date
        lowerDate = currentEltdate;
        upperDate = otherEltDate;
    }else{
        lowerDate = otherEltDate;
        upperDate = currentEltdate;
    }
    return this.optional(element) || (lowerDate <= upperDate);
});
// jquery validation method to validate date range
jQuery.validator.addMethod("DateRange", function(value, element, arg0, arg1) {
    var comp = arg0.split('/');
    var m = parseInt(comp[0], 10);
    var d = parseInt(comp[1], 10);
    var y = parseInt(comp[2], 10);
    var startDate = new Date(y,m,d);

    comp = arg1.split('/');
    m = parseInt(comp[0], 10);
    d = parseInt(comp[1], 10);
    y = parseInt(comp[2], 10);
    var endDate = new Date(y,m,d);

    comp = value.split('/');
    m = parseInt(comp[0], 10);
    d = parseInt(comp[1], 10);
    y = parseInt(comp[2], 10);
    var date = new Date(y,m,d);

    return this.optional(element) || ((startDate <= date) && (date <= endDate));
});
于 2013-06-18T07:45:58.843 に答える