正则表达式的 JS 对象类型返回为 NaN
JS Object Type for regex returning as NaN
我有以下函数,当input
字段中的值发生change
事件时,我正在使用正则表达式匹配来检查正确的日期格式。
我的问题是month
、day
和year
都以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]
返回一个布尔值,即 true
或false
,仅告诉您表达式是否与输入匹配。
然后,由于if(result !== null)
对于true
或false
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上阅读
相关文章:
- 如何防止Math.max()返回NaN
- 尝试求和时,在我的表的页脚中返回$NaN
- 为什么Math.pow(1,无穷大)返回NaN
- JavaScript:返回NaN(第2部分)
- 为什么这个代码返回NaN
- Protractor-分配给element.all.locator.count的变量返回NaN why
- javascript 在求和时返回 NaN
- 计算地理位置距离返回 NaN
- nan在C++中是什么意思?为什么pow(-4,-2.1)返回-nan
- 货币字段上的 parseInt 返回 NaN
- Javascript:解析csv中的字符串返回NaN(不是数字)
- JS脚本返回NaN
- 解析html td返回NaN
- Javascript函数返回NaN
- 在Javascript中计算日期会返回NaN-NaN-NaN
- 如果我对索引进行硬编码,它会按预期工作,为什么这个增量器会返回NAN
- new Date返回NaN或从服务器日期()开始的错误时间
- 变量递增返回 NaN
- 为什么我的基于约简的平均值函数返回 NaN
- Javascript-将字符串转换为Int会返回NaN错误