2

jQuery UI Datepickerを含むフォームがあり、jQueryValidationプラグインを使用して検証されます。

日付ピッカーは、以下を使用して作成されます。

$("#dob").datepicker({
        changeMonth: true,
        changeYear: true,
        dateFormat: "dd/mm/yy",
        onSelect: function (){
            this.focus();   
        },
    });

ただし、検証プラグインは、dd / mm / yyyyを使用して検証する必要がある場合、米国形式で検証するようです。これは、任意の月の12日を超える日付は無効と見なされることを意味します。

周りを見回して、正規表現を使用して日付を検証する別の方法を追加する方法を見つけました。

$.validator.addMethod(
    "australianDate",
    function(value, element) {
        return value.match(/^(0?[1-9]|[12][0-9]|3[01])\/(0?[1-9]|1[012])\/((19|20)\\d\\d)$/);
    },
    "Please enter a date in the format dd/mm/yyyy."
);

次に、これがルールに追加されます。

        dob:{
             required:true,
             australianDate: true
        },

しかし、これはどの入力でも失敗するようです。

私が使用している正規表現は、過去にphpで使用したものであり、一般的な(any2numbers / any2numbers / any4numbers)式よりも少し正確であり、JavaScriptでも使用できるようにしたいと思います。

javascriptの正規表現はphpとは異なる形式である必要がありますか?私が間違っているところです。

どんな助けでも大歓迎です。

4

3 に答える 3

1

ただのコメント:

より良い日付検証機能は次のとおりです。

// Expects date string in format dd/mm/yyyy
function isValidDate(s) {
  if (s === null || s.length !== 10) {
    return false;
  }
  s = s.split('/');
  var d = new Date(s[2], --s[1], s[0]);
  return d.getFullYear() == s[2] && d.getDate() == s[0];
}
于 2012-11-28T04:49:32.747 に答える
0
^(((((0[1-9])|(1\d)|(2[0-8]))\/((0[1-9])|(1[0-2])))|((31\/((0[13578])|(1[02])))|((29|30)\/((0[1,3-9])|(1[0-2])))))\/((20[0-9][0-9])|(19[0-9][0-9])))|((29\/02\/(19|20)(([02468][048])|([13579][26]))))$  

上記のパターンを試してみてください私はそれがうまくいくことを願っています

于 2012-11-28T04:57:18.663 に答える
0

ご入力いただきありがとうございます。どちらの回答も機能しましたが、うるう年や2月が最大28/29である必要があるなどの検証は行われませんでした。

私は周りを見回し続け、単にdate.jsと呼ばれる別のjqueryプラグインを見つけることができました。

リンクしたら、Date.parseExact関数を呼び出すだけです。

jQuery.validator.addMethod("australianDate", function(value, element) { 
    return Date.parseExact(value, "d/M/yyyy");
}, "Please enter a valid date in the format dd/mm/yyyy.");

うるう年と私が正しくテストした他のすべてを検証します。

于 2012-12-04T21:58:58.547 に答える