0

change我有以下功能,当字段中的值发生事件时,我使用正则表达式匹配来检查正确的日期格式input

我的问题是month,dayyear正在返回NaN,我不知道为什么。我正在解析正则表达式对象[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并且仅告诉您表达式是否与输入匹配。

然后,因为是orif(result !== null)总是正确的,所以语句块被执行。resulttruefalseif

match[x]true[x]与(or )相同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);

有关 exec 的更多信息,您可以在MDN阅读

于 2012-04-13T14:17:44.817 回答