编辑:对于在提出这个问题时犯同样错误的任何人,请在下面查找我的修改后的答案,该答案展示了一个更清洁的解决方案来解决这个问题。
尝试允许用户输入 2 位或 4 位日期格式,并允许两者都通过验证,但使用 4 位等效值自动更正 2 位格式,假设前 2 位数字应与当前前 2 位数字相同。
我在使用 javascriptreplace()
函数时遇到问题。这一行:
input.replace(enteredDate, year);
没有按预期工作。spine.js
在我使用的框架的上下文中,在操纵应该进行验证的字段时,在其他任何地方都input
引用$(event.target)
并且似乎是正确的。input
最终,我想用完全连接的字符串替换在输入字段中找到的原始字符串(我还没有构建出来),但是现在,如何用分配的 var替换input
(where input is ) 的内容这里:var = $(event.target)
year
var year = currentYear.charAt(0) + currentYear.charAt(1) + unparsedYear;
这是到目前为止我所拥有的函数的完整代码,它在引用该.replace()
行时引发以下错误 - Uncaught TypeError: Object [object Object] has no method 'replace'
validateDate: function(event) {
var input = $(event.target);
var enteredDate = input.val();
input.destroyValidationMessage();
var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{2})|(\d{4})$/;
var result = enteredDate.match(pattern);
if (result !== null) {
var month = parseInt(result[1], 10);
var day = parseInt(result[2], 10);
var year = parseInt(result[3], 10);
var unparsedYear = parseInt(result[3], 10);
var unparsedYearStrLength = unparsedYear.toString().length;
if ( unparsedYearStrLength < 4) {
var currentYear = new Date().getFullYear().toString();
var year = currentYear.charAt(0) + currentYear.charAt(1) + unparsedYear;
alert('Autocorrected year will be ' + year);
input.replace(enteredDate, year);
}
var date = new Date(year, month - 1, day);
var isValid = date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day;
} else {
input.createValidationMessage('Invalid Date');
input.addClass('invalid');
}
}