2014-09-07 1 views
0

J'ai créé un tableur d'entrées pour permettre l'insertion de temps pour que les gens commencent/finissent de travailler, et jusqu'ici j'ai tout soumis de tout ce qui fonctionne en PHP et tous les affichages fonctionnent avec HTML/CSS, mais J'ai des difficultés à configurer mon Regex en JavaScript.Comment puis-je configurer cette boîte de regex d'entrée pour demander une heure?

Le format de l'entrée de temps est:
0-12 (numéro, indiquez Heure de début)
: (Colon, heure et minutes Split)
0-59 (Nombre, pour des minutes)
A/P (A ou P, indiqué AM ou PM)
- (Hyphen, Split début et de fin)
0-12 (numéro, iNDIQUER Heure de début)
: (Colon, heure Split et minutes)
0-59 (Nombre, pour des minutes)
A/P (A ou P, indiqué AM ou PM)

Le Regex que j'utilisais tout en créant les autres scripts est /^(([[0-9:\]{1,5}\])+([ap])+(\-[[0-9:\]{1,5}\])+([ap]))/i, qui travaillait bien jusqu'à ce que j'ai réalisé que je devais pour ajouter un $ à la fin pour définir une limite à la longueur, puis il a cessé de fonctionner.

/^(([[0-9:\]{1,5}\])+([ap])+(\-[[0-9:\]{1,5}\])+([ap]))$/i accepte les réponses comme 4a-5, 4:30a-5, 4:a-5 et 4-5. Une fois que vous avez ajouté :30 ou p à la fin de la chaîne, il n'est plus valide.

Quelqu'un pourrait-il m'aider à construire un temps Regex valide?

Merci,

Edit: Le champ d'entrée est une option "texte".
J'essaie de l'obtenir pour exiger au moins , et d'accepter :## ainsi. (#:##a-#:##p)

+1

Un bel outil pour violon http://regex101.com. – loveNoHate

+0

Utilise le HTML 'input' de type' time' une option? –

+2

Votre modèle est plein d'erreurs, pourriez-vous poster plusieurs exemples de chaînes. –

Répondre

1

Ce modèle devrait faire le travail:

/^(?:1[0-2]?|[0-9])(?::[0-5][0-9])?[AP]-(?:1[0-2]?|[0-9])(?::[0-5][0-9])?[AP]$/i 
+0

Cela fonctionne exceptionnellement bien, mais comment puis-je rendre l'heure des minutes facultative? Pour avoir 4a-5: 30p sans avoir à mettre 4: 00a-5: 30p – TheElm

+0

@TheElm: les minutes sont déjà optionnelles dans ce modèle, puisque je les ai mises dans un groupe optionnel non capturant: '(? :: [0- 5] [0-9])? ' –

+0

@TheElm Vous pouvez également utiliser' ' – hjpotter92

Questions connexes