正则表达式返回为NaN的JS对象类型

时间:2012-04-13 14:14:54

标签: javascript regex

我有以下函数,我正在使用正则表达式匹配,以便在change字段中的值发生input事件时检查正确的日期格式。

我的问题是,monthdayyear作为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);
        }
   }

2 个答案:

答案 0 :(得分:3)

.test() [MDN]返回一个布尔值,即truefalse,只会告诉您表达式是否与输入匹配。

然后,由于if(result !== null)始终为resulttruefalse,因此if语句块被执行。

match[x]true[x](或false[x])相同,而不是抛出错误,它会返回undefined。这是因为JavaScript在内部将原始值转换为对象,并且访问不存在的属性会导致返回值undefined

此外,parseInt(undefined, 10)会返回NaN


您想使用.match() [MDN]

var result = enteredDate.match(pattern);

将数字字符串转换为数字的较短方法是使用一元+运算符:

var month = +result[1];

这给出了相同的结果,因为输入字符串只包含数字。

答案 1 :(得分:2)

您需要使用exec代替test

var result = pattern.exec(enteredDate);

有关exec的更多信息,请阅读MDN