У меня есть входные данные, которые мне нужно хранить как DD-MMM-YYYY. У меня есть код ниже, чтобы проверить. По большей части он гарантирует, что данные находятся в формате DD MMM YYYY, но мне нужно включить дефисы. Например, 01-JUN-2015 считается действительным, но также 01/JUN/2015. Второй должен потерпеть неудачу. Я попытался включить дефисы без успеха.Javascript проверяет формат даты (включая дефисы)
function testDate(sender, args) {
var result = isDate(document.getElementById('dateTest').value);
console.log(document.getElementById('dateTest').value);
console.log(result);
$('#result').text(result);
}
//function isDate(txtDate) {
function isDate(currVal) {
if (currVal == '') return false;
//Declare Regex
var rxDatePattern = /^(\d{1,2})(\/|-)(?:(\d{1,2})|(jan)|(feb)|(mar)|(apr)|(may)|(jun)|(jul)|(aug)|(sep)|(oct)|(nov)|(dec))(\/|-)(\d{4})$/i;
var dtArray = currVal.match(rxDatePattern);
if (dtArray == null) return false;
var dtDay = parseInt(dtArray[1]);
var dtMonth = parseInt(dtArray[3]);
var dtYear = parseInt(dtArray[17]);
if (isNaN(dtMonth)) {
for (var i = 4; i <= 15; i++) {
if ((dtArray[i])) {
dtMonth = i - 3;
break;
}
}
}
if (dtMonth < 1 || dtMonth > 12) return false;
else if (dtDay < 1 || dtDay > 31) return false;
else if ((dtMonth == 4 || dtMonth == 6 || dtMonth == 9 || dtMonth == 11) && dtDay == 31) return false;
else if (dtMonth == 2) {
var isleap = (dtYear % 4 == 0 && (dtYear % 100 != 0 || dtYear % 400 == 0));
if (dtDay > 29 || (dtDay == 29 && !isleap)) return false;
}
К сожалению, я не имею кодовой базы и не могу добавить сторонние библиотеки. Мне нужно заполнить его в собственном javascript. – user2924127
только для того, чтобы быть понятным, вы хотите, чтобы 01-JUN-2015 преуспели, а 01/JUN/2015 потерпеть неудачу? Если это так, те части в регулярном выражении виноваты: '(\/| -)' они должны быть '(-)' – Osuwariboy
ЭТО! Большое спасибо! – user2924127