Для тех, кто смотрит на это и полностью запутался, вот выдержка из моего сценария. К сожалению, все, что он делает, - это сопоставляет действительные числа при вводе даты и времени, и 31 февраля будет помечен как действительный, но, как многие говорили, регулярное выражение действительно не лучший инструмент для проведения этого теста.
Чтобы соответствовать дате в формате «гггг-ММ-дд чч: мм» (или в любом порядке, пожалуйста)
var dateerrors = false;
var yearReg = '(201[4-9]|202[0-9])'; ///< Allows a number between 2014 and 2029
var monthReg = '(0[1-9]|1[0-2])'; ///< Allows a number between 00 and 12
var dayReg = '(0[1-9]|1[0-9]|2[0-9]|3[0-1])'; ///< Allows a number between 00 and 31
var hourReg = '([0-1][0-9]|2[0-3])'; ///< Allows a number between 00 and 24
var minReg = '([0-5][0-9])'; ///< Allows a number between 00 and 59
var reg = new RegExp('^' + yearReg + '-' + monthReg + '-' + dayReg + ' ' + hourReg + ':' + minReg + '$', 'g');
$('input').filter(function () {return this.id.match(/myhtml_element_with_id_\d+_datetime/);}).each(function (e) {
if (e > 0) {
// Don't test the first input. This will use the default
var val = $(this).val();
if (val && !val.trim().match(reg)) {
dateerrors = true;
return false;
}
}
});
if (dateerrors) {
alert('You must enter a validate date in the format "yyyy-mm-dd HH:MM", e.g. 2019-12-31 19:30');
return false;
}
Приведенный выше скрипт начинается с создания объекта регулярного выражения. Затем он находит все входные данные, чьи идентификаторы соответствуют определенному шаблону, и затем просматривает их. Я не проверяю первый ввод, который я нахожу (if (e > 0)
).
Немного объяснения:
var reg = new RegExp('^' + yearReg + '-' + monthReg + '-' + dayReg + ' ' + hourReg + ':' + minReg + '$', 'g');
^
означает начало матча, тогда как $
означает конец матча.
return this.id.match(/myhtml_element_with_id_\d+_datetime/);
\d+
означает совпадение с единственной или непрерывной последовательностью целых чисел, поэтому myhtml_element_with_id_56_datetime
и myhtml_element_with_id_2_datetime
будет совпадать, но myhtml_element_with_id_5a_datetime
не будет