2013-08-30 1 views
1

J'essaie de valider 12 heures sans AM/PM dans ce champ de saisie. Quelle est la meilleure façon d'aborder cela? J'ai énuméré ce que j'ai actuellement qui ne fonctionne pas. Été à la recherche d'un couple de jours sur la façon d'aborder cela à pas de chance.Valider l'heure dans le widget Dashcode

<input id="dtstartf" type="text" name="time" value="08:00" class="apple-textfield apple- no-children" apple-part="com.apple.Dashcode.part.textfield" onkeypress="time(event)"> 

function time(event) { 
    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; 
} 
+0

Cela ne fonctionnera pas dans tous les navigateurs, mais pourquoi ne pas utiliser le type d'entrée de temps HTML5? Changez simplement type = "text" en type = "time" et vous avez déjà une validation côté client et un widget sélecteur de temps dans la plupart des navigateurs. Vous pourriez également être en mesure de compenser le soutien sur les navigateurs plus anciens qui ne le supportent pas avec quelque chose comme https://github.com/dsheiko/HTML5-Form-Shim –

Répondre

0

La fonction suivante semble fonctionner OK:

function validateTime(time) { 
    // Check pattern 
    var pattern = /^\d{1,2}:\d{1,2}$/; 
    if (!pattern.test(time)) { 
     return false; 
    } 
    // Split them and check the individual values 
    var splitvalues = time.split(':'); 
    if (splitvalues[0] > 12 || splitvalues[0] < 1 || splitvalues[1] < 0 || splitvalues[1] > 59) { 
     return false; 
    } 
    // If we get to this point, everything should be valid 
    return true; 
} 

Cependant, comme vous avez spécifiquement mentionné que c'est pour un widget Dashcode, je pense que le type d'entrée de temps HTML5 peut être suffisante, Dans ce cas, changer simplement le type d'entrée en "temps" sera suffisant.