Für diejenigen, die sich diese ansehen und völlig verwirrt sind, ist hier ein Auszug aus meinem Skript. Leider stimmt es nur mit gültigen Zahlen in einer Datums- / Uhrzeit-Eingabe überein, und der 31. Februar wird als gültig markiert, aber wie so viele gesagt haben, ist Regex wirklich nicht das beste Werkzeug, um diesen Test durchzuführen.
Um ein Datum im Format 'JJJJ-MM-TT hh: mm' abzugleichen (oder in beliebiger Reihenfolge)
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;
}
Das obige Skript beginnt mit dem Erstellen eines Regex-Objekts. Es findet dann alle Eingaben, deren IDs einem bestimmten Muster entsprechen, und durchläuft diese dann. Ich teste nicht die erste Eingabe, die ich finde ( if (e > 0)
).
Ein bisschen Erklärung:
var reg = new RegExp('^' + yearReg + '-' + monthReg + '-' + dayReg + ' ' + hourReg + ':' + minReg + '$', 'g');
^
bedeutet Spielbeginn, während Spielende $
bedeutet.
return this.id.match(/myhtml_element_with_id_\d+_datetime/);
\d+
bedeutet, dass eine einzelne oder eine zusammenhängende Folge von ganzen Zahlen übereinstimmt, also myhtml_element_with_id_56_datetime
und myhtml_element_with_id_2_datetime
übereinstimmt, aber myhtml_element_with_id_5a_datetime
nicht