0

changeフィールドの値でイベントが発生したときに、正規表現マッチングを使用して適切な日付形式をチェックする次の関数がありinputます。

私の問題はmonth、、、がとして戻ってくることですがday、理由はわかりません。で正規表現オブジェクト、、、をそれぞれ解析しているので、なぜそれらがとして返されるのかわかりません。 yearNaN[1][2][3]parseInt()NaN

validateDate: function(event) {

        var input = $(event.target);
        var enteredDate = input.val();

        input.destroyValidationMessage();

        var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
        var result = pattern.test(enteredDate);

        if (result !== null) {
            var month = parseInt(result[1], 10);
            var day = parseInt(result[2], 10);
            var year = parseInt(result[3], 10);
        }
   }
4

2 に答える 2

3

.test() [MDN]はブール値、つまりtrueorfalseを返し、式が入力と一致するかどうかのみを示します。

次に、または のいずれかであるif(result !== null)場合は常に true であるため、ステートメント ブロックが実行されます。resulttruefalseif

match[x]true[x]は(または) と同じでfalse[x]、エラーをスローする代わりに を返しますundefined。これは、JavaScript が内部的にプリミティブ値をオブジェクトに変換し、存在しないプロパティにアクセスすると戻り値が返されるためですundefined

さらに、 をparseInt(undefined, 10)返しますNaN


.match() [MDN]を使用したい場合:

var result = enteredDate.match(pattern);

数値文字列を数値に変換する短い方法は、単項演算子を使用することです+

var month = +result[1];

入力文字列には数字しか含まれていないため、ここで同じ結果が得られます。

于 2012-04-13T14:17:33.537 に答える
2

exec代わりに使用する必要がありますtest

var result = pattern.exec(enteredDate);

MDNで読むことができる exec の詳細

于 2012-04-13T14:17:44.817 に答える