Pour ceux qui les regardent et sont complètement perdus, voici un extrait de mon script. Malheureusement, tout ce qu'il fait est de faire correspondre des chiffres valides dans une entrée de date et d'heure, et le 31 février sera marqué comme valide, mais comme beaucoup l'ont dit, regex n'est vraiment pas le meilleur outil pour faire ce test.
Pour faire correspondre une date au format 'yyyy-MM-dd hh:mm' (ou dans l'ordre que vous voulez)
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;
}
Le script ci-dessus commence par construire un objet regex. Il trouve ensuite toutes les entrées dont les identifiants correspondent à un certain motif, puis les parcourt en boucle. Je ne teste pas la première entrée que je trouve ( if (e > 0)
).
Un peu d'explication :
var reg = new RegExp('^' + yearReg + '-' + monthReg + '-' + dayReg + ' ' + hourReg + ':' + minReg + '$', 'g');
^
signifie le début du match, tandis que $
signifie la fin du match.
return this.id.match(/myhtml_element_with_id_\d+_datetime/);
\d+
signifie faire correspondre un seul ou une séquence contiguë d'entiers, donc myhtml_element_with_id_56_datetime
y myhtml_element_with_id_2_datetime
correspondra, mais myhtml_element_with_id_5a_datetime
ne sera pas