Je suis frustré par une expression régulière masquant le champ de saisie. Je veux limiter l'entrée au format hh: mm AM | PM et je ne parviens pas à obtenir cette regex au travail.
J'utilise cette expression régulière en conjonction avec un outil jQuery de www.ThimbleOpenSource.com
. C'était l'outil filter_input.js ou autre.
Cela semble fonctionner pour une expression régulière simple, mais celle que j'ai créée ne semble pas fonctionner. Ceci est mon lien de test jsFiddle ci-dessous.
J'ai créé un exemple avec jsfiddle, basé sur l'expression régulière de la réponse de von Yuri: http://jsfiddle.net/Evaqk/
$('#test1, #test2').blur(function(){
var validTime = $(this).val().match(/^(0?[1-9]|1[012])(:[0-5]\d) [APap][mM]$/);
if (!validTime) {
$(this).val('').focus().css('background', '#fdd');
} else {
$(this).css('background', 'transparent');
}
});
Vous ne pouvez pas faire cela avec ce plugin car ici vous devez vérifier chaque personnage.
HTML:
<form>
<p>When?</p>
<input type="text" id="test1" placeholder="hh:mm(AM|PM)"/>
</form>
JavaScript:
$("#test1").keypress(function(e) {
var regex = ["[0-2]",
"[0-4]",
":",
"[0-6]",
"[0-9]",
"(A|P)",
"M"],
string = $(this).val() + String.fromCharCode(e.which),
b = true;
for (var i = 0; i < string.length; i++) {
if (!new RegExp("^" + regex[i] + "$").test(string[i])) {
b = false;
}
}
return b;
});
Tout d'abord, si vous l'utilisez pour le champ de saisie, vous ne devez jamais permettre aux utilisateurs de saisir des informations de date ou d'heure à l'aide de champs de texte, en espérant que leur format sera strict.
Mais si vous insistez:
/^(0?[1-9]|1[012])(:[0-5]\d) [APap][mM]$/
Cette expression régulière validera l'heure au format AM/PM.
Donc, je suis à peu près sûr que le problème est résolu, mais je me suis récemment heurté à ce problème et je n'ai pas trouvé de réponse assez rapidement. J'utilise Bootstrap Validator (bootstrapvalidator.com de @nghuuphuoc) conjointement avec DateTimepicker d'Eonasdan pour valider une heure (PS: vous pouvez désactiver la date dans le plug-in d'Eonasdan).
Comme Bootstrap Validator n’a pas encore de validateur, vous devez utiliser un regex. Celui-ci a parfaitement fonctionné pour moi:
^([0-1]?[0-9]|2[0-3]):[0-5][0-9] [APap][mM]$
Vérifiez cette solution aussi.
<!DOCTYPE html>
<html>
<body>
<p>This demo used to validate time with 12 hours format</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>
function myFunction() {
var regexp = /^(0?[1-9]|1[012])(:[0-5]\d) [APap][mM]$/;
var res = regexp.test('12:00 AM'); //try with alphabets or wrong format
document.getElementById("demo").innerHTML = res;
}
</script>
</body>
</html>
la fonction suivante renvoie (true/false) valeur
function CheckTime(HtmlInputElement) {
var dt = HtmlInputElement.value;
return (/(0?[1-9]|1[0-2]):[0-5][0-9] ?[APap][mM]$/.test(dt));
}