我有以下函数,我正在使用正则表达式匹配,以便在change
字段中的值发生input
事件时检查正确的日期格式。
我的问题是,month
,day
和year
作为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);
}
}
答案 0 :(得分:3)
.test()
[MDN]返回一个布尔值,即true
或false
,只会告诉您表达式是否与输入匹配。
然后,由于if(result !== null)
始终为result
,true
或false
,因此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)