編集:この質問をする際に私がしたのと同じ間違いを犯した人は、この問題に対するよりクリーンな解決策を示す以下の修正された回答を探してください。
2 桁または 4 桁の日付形式のユーザー入力を許可し、両方が検証に合格することを許可しようとしていますが、先頭の 2 桁が現在の先頭の 2 桁と同じであるという前提で、2 桁の形式を 4 桁に相当する値で自動修正します。
replace()
javascript関数で困っています。この行:
input.replace(enteredDate, year);
期待どおりに動作していません。spine.js
私が使用しているフレームワークのコンテキストでは、検証が発生する必要があるフィールドを操作する際に、他の場所をinput
参照して$(event.target)
正しいように見えます。最終的には、入力フィールドで見つかった元の文字列を完全に連結されたもの (まだ作成していません) に置き換えたいのですが、今のところ、(input isの場合) の内容を割り当てられた varinput
に置き換えるにはどうすればよいですか?ここ:input
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');
}
}