2009-07-29 3 views
1

Fondamentalement, je voudrais avoir une entrée que lorsque blur'd, vérifiera l'entrée pour vous assurer qu'il est dans le format ...Vérifiez que l'utilisateur entre un format d'heure? par exemple 13:00

[24 heures]: [minutes]

Donc, par exemple, 13h00 ou 15h30.

Je suppose que je dois le diviser en trois parties, vérifiez le premier bit est compris entre 0 et 24, puis vérifier qu'il a le point-virgule, puis vérifiez qu'il a un nombre compris entre 0 et 60.

Aller plus compliqué que ça, ce serait fantastique de l'avoir si l'utilisateur entre 19 ans il le complétera à 19h00 par exemple. J'utilise jQuery fwiw, mais le code normal est bon, par exemple j'utilise ce petit bout de code jusqu'ici qui fonctionne bien, à convertir. entrées à:

tempval = $(this).val().replace(".", ":"); 
$(this).val(tempval); 

Je ne sais pas où commencer avec cela, si quelqu'un pouvait me recommander une lecture ce serait fantastique, je vous remercie!

Répondre

1

Je suggère d'utiliser masked input De cette façon, la mauvaise entrée sera évitée en premier lieu.

Disclaimer: Je n'ai pas utilisé moi-même plug-in, juste trouvé par mots-clés « entrée masquée »

+0

Cela pourrait être absolument parfait - merci! J'aimerais le faire moi-même si possible, et peut revoir le code quand j'ai plus de temps, mais je pense que cela pourrait être idéal à utiliser pour le moment! Je vous remercie :) – Nick

4

([0-1] [0-9] | 2 [0-3]?): ([0-5] [0-9])

Je pense que c'est la regex que vous cherchez pour (pas spécifiquement pour javascript si).

http://www.regular-expressions.info/ Ce site contient d'excellentes informations sur les expressions régulières spécifiques à une langue! À votre santé!

+0

Ahh, je vous remercie - je vais jeter un oeil à ce moment! – Nick

+1

Merci, juste essayé de l'implémenter comme si ... if ($ (this + ": regex ('([0-1]? [0-9] | 2 [0-3]): ([0-5 ] [0-9]) ') ")) { alerte (' est bien '); } ... pour une raison quelconque, il affiche toujours 'ça marche!' même quand il ne devrait pas :( – Nick

+1

Essayez quelque chose comme ça ... if (this.match (/^([0-1]?[0-9] | 2 [0-3]): ([0-5] [0-9]) $ /)) { alerte ('est bien'); } –

1

Il y a un tas de widgets qui traitent déjà de la validation du temps - essayez de googler pour "widget temps jQuery" - le first result ne semble pas mauvais.

+0

Merci beaucoup - cela semble très bien, mais malheureusement, je préfère ne pas utiliser un widget si possible comme les utilisateurs ne seront pas très technophiles et je pense qu'il suffit d'entrer le texte (et validé/édité en conséquence en utilisant Javascript) pourrait être mieux que d'utiliser une sorte de sélecteur impressionnant mais légèrement confus. À noter également qu'ils doivent sélectionner 14 fois différentes, donc la vitesse à laquelle ils peuvent le faire est assez importante. Salutations – Nick

1
var re = /^(\d+)(:\d+)?$/; 
var match = re.match(yourstring); 

Maintenant, si le match a réussi match est un tableau avec les morceaux présents: match[0] est l'ensemble de yourstring (vous ne vous inquiétez pas à ce sujet), match[1] a les chiffres avant le côlon (le cas échéant du côlon, sinon seulement les chiffres), match[2] s'il existe a le colon suivi par les chiffres après lui. Alors maintenant, vous avez juste besoin d'effectuer vos tests numériques sur match[1], et éventuellement match[2] moins le côlon principal, pour vous assurer que les chiffres sont corrects.

+0

Merci beaucoup Alex, pour une raison quelconque, je n'ai pas pensé à le diviser comme ça, mais c'est une excellente solution que je vais examiner maintenant! – Nick

Questions connexes