Для тих, хто дивиться на них і заплутається повністю, ось уривок з мого сценарію. На жаль, все, що це робиться, - це відповідність дійсних цифр у введенні часу дати, і 31 лютого буде позначено як дійсне, але, як так багато хто сказала, регулярно вираження не є найкращим інструментом для проведення цього тесту.
Щоб відповідати даті у форматі "yyyy-MM-dd hh: mm" (Або, в будь-якому порядку, будь ласка)
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
не будуть