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

JS Object Type for regex returning as NaN

本文关键字:返回 NaN 类型 对象 JS 正则表达式      更新时间:2023-09-26

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

我的问题是monthdayyear都以NaN的身份返回,我不知道为什么。 我正在用parseInt()分别解析正则表达式对象[1][2][3],所以我不确定为什么它们以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);
        }
   }

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

然后,由于if(result !== null)对于truefalse result总是为真,因此执行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];

这在这里为您提供相同的结果,因为输入字符串仅包含数字。

你需要使用 exec 而不是 test

var result = pattern.exec(enteredDate);

更多关于exec的信息,你可以在MDN上阅读