Je dois créer un formulaire HTML avec un champ de saisie de texte pour Heures et minutes.
Quelque chose comme:
Nom: [Foo]
Nom de famille: [Bar]
Tâche: [Spam]
Heures Minutes: [00:15] <- Texte saisi.
Comment puis-je aider/valider/forcer l'utilisateur à compiler les valeurs Heures et Minutes au seul format autorisé HH: mm en utilisant Javascript? *
Plage de temps valide: de 00:00 à 23:59
* Je ne peux pas utiliser Jquery et bien sûr je vérifierai deux fois la valeur soumise côté serveur
Soit avec l'expression régulière suivante:
^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$
Ou à la main, mais je suggère fortement le RegExp:) Un exemple simple
<SCRIPT TYPE="text/JavaScript">
function validateHhMm(inputField) {
var isValid = /^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/.test(inputField.value);
if (isValid) {
inputField.style.backgroundColor = '#bfa';
} else {
inputField.style.backgroundColor = '#fba';
}
return isValid;
}
</SCRIPT>
<FORM METHOD="POST">
<input type="text" onchange="validateHhMm(this);" />
</FORM>
La RegExp de la première réponse ne correspond pas correctement à la requête du PO.
^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$
Devrait être
^([0-1][0-9]|2[0-3]):([0-5][0-9])$
Matchs 00-19 ou 20-23: 00-59
OP a demandé la validation de HH: MM dans la plage 00:00 - 23:59
Pas de secondes. 24h00 ne devrait pas être valide. Deux chiffres pour l'entrée de l'heure et des minutes.
<HTML>
<Head>
<script language="javascript">
function validateTime(obj)
{
var timeValue = obj.value;
if(timeValue == "" || timeValue.indexOf(":")<0)
{
alert("Invalid Time format");
return false;
}
else
{
var sHours = timeValue.split(':')[0];
var sMinutes = timeValue.split(':')[1];
if(sHours == "" || isNaN(sHours) || parseInt(sHours)>23)
{
alert("Invalid Time format");
return false;
}
else if(parseInt(sHours) == 0)
sHours = "00";
else if (sHours <10)
sHours = "0"+sHours;
if(sMinutes == "" || isNaN(sMinutes) || parseInt(sMinutes)>59)
{
alert("Invalid Time format");
return false;
}
else if(parseInt(sMinutes) == 0)
sMinutes = "00";
else if (sMinutes <10)
sMinutes = "0"+sMinutes;
obj.value = sHours + ":" + sMinutes;
}
return true;
}
</script>
</Head>
<Body>
<input type="text" onblur="validateTime(this)">
</Body>
</HTML>
Que diriez-vous
function validTime(inputStr) {
if (!inputStr || inputStr.length<1) {return false;}
var time = inputStr.split(':');
return time.length === 2
&& parseInt(time[0],10)>=0
&& parseInt(time[0],10)<=23
&& parseInt(time[1],10)>=0
&& parseInt(time[1],10)<=59;
}
ce n'est peut-être pas le meilleur mais ça marche pour moi. Je retourne faux s'il n'y a pas d'erreur dans ce cas. vérifie à la fois le format et les valeurs.
if (value.substr(2,1) === ':') {
if (!value.match(/^\d\d:\d\d/)) {
return "Invalid Format";
}
else if (parseInt(value.substr(0,2)) >= 24 || parseInt(value.substr(3,2)) >= 60) {
return "Invalid Format";
}
else {
return false;
}
}
else {
return "Invalid Format";
}
Vous pouvez utiliser quelque chose comme jQuery.maskedit