Javascript Regex: la validation d'un lit double ou float
Voici le modèle que je suis en train de travailler sur:
var re = /(\d{1,2}\.(?=\d{1,2}))/;
Ce que j'aimerais pour ce retour est un un ou deux chiffres (qui ne sera jamais supérieure à 24, parce qu'il est pour un temps mgmt app), qui peut ou peut ne pas être suivi par un point décimal avec un ou deux chiffres de fin, mais pas plus de deux.
Je ne suis pas sûr à propos de la correspondance de sous-chaîne entre parenthèses mélangé avec de l'anticipation. J'ai juste deviné et imbriqués entre eux. En fin de compte, si ma syntaxe est correct, je pense que la seule chose qui me manque est la façon de suggérer que le modèle peut ou peut ne pas avoir des chiffres, et peut ou peut ne pas contenir un nombre décimal avec mise à l'essai chiffres.
Laissez-moi savoir si vous avez besoin de plus d'infos.
Mise À Jour, Exemples:
Que nous ne traitons avec le temps, et pas plus de temps que ce qui peut se produire en une seule journée. 24 serait le plus haut d'entrée.
Valide:
23.75
1.4
1
0.5
0
.2
Invalide:
1.897
%#$#@$#
Words
other characters
Nouvelle Mise À Jour:
Puisque c'est un nombre décimal, 23.75 œuvres. Nous ne sommes pas à compter les minutes, mais plutôt les fractions d'heures.
Aussi, pour l'anecdote, j'ai essayé de valider à l'aide de méthodes et conditions, et il a été de laisser les lettres de passer après les décimales. J'ai pris la décision d'aller avec la regex.
.
et ne jamais dire :
? Si l'entrée est 123.456
qu'aimeriez-vous passer?J'ai mis à jour l'entrée avec des exemples.
pourquoi utiliser des regex pour cette
Que voulez-vous faire avec 12.345? Est-il valide, invalide, vous avez tronquer à 12.34 ou autour d'elle à 12,35? Comment pouvez-vous être sûr que le numéro ne sera pas supérieure à 24, mais il peut être une chaîne de caractères? Que voulez-vous faire à ce sujet
12.89PM
? Que diriez - 12,45
(qui est la façon dont les Européens écrire 12.45
)OriginalL'auteur eightArmCode | 2013-06-25
Vous devez vous connecter pour publier un commentaire.
Si "n'importe quel nombre donné sera à moins de 24", donc qui n'a pas besoin d'être testé séparément, alors l'expression suivante de travail.
Voir http://rubular.com/r/YDfHr5T5sQ
Testé contre:
Explication:
Remarque - cette expression correspond à la "chaîne vide". Vous pouvez tester pour que séparément, si il ya une chance que sera en quelque sorte de faire son chemin à cette expression...
Simple code à tester dans votre javascript:
Remarque - j'ai fait un tweak pour le
regex
- ajout de?:
dans les "bits après la virgule" du groupe. Cela signifie simplement "match mais ne captent", alors le résultat sera de retour que le matchm[0]
et non pas le groupe.34
dansm[1]
. Il n'a pas vraiment d'importance puisque je attribuergoodTime
la valeur de m[0] (mais seulement si c'est un bon moment). Vous pouvez le voir en action iciVous n'essayez pas de remplacer - il suffit de match:
var str = "12.34"; var m = str.match(/^\d{0,2}(\.\d{0,2}){0,1}$/);
.m[0]
contiendra le match - s'il en existe un. Sinon, il sera vide.J'ai mis à jour ma réponse avec un "vous dire que vous ne savez pas quoi que ce soit" peu à la fin... Ne vous inquiétez pas, nous avons tous été là. Permettez-moi de savoir si c'est maintenant clair et résolu - dans ce cas, vous pourriez décider "d'accepter" l'une des réponses données (avec la petite case à cocher).
Êtes-vous à l'aide de la dernière version de mon code (mise à jour 2 heures ago) - le "code simple pour tester dans votre Javascript"? La variable
goodTime
devraient avoir simplement le droit de réponse dans... Deux tours - j'ai changé l'expression très légèrement (ajouté?:
) et explicitement l'accèsm[0]
pour la réponse.Ne peut pas upvote ce un assez! Merci pour la solution et le site cool
Rubular
OriginalL'auteur Floris
Eh bien, vous pouvez essayer cette regex
Mais vous n'avez pas besoin d'utiliser les regex ici,juste d'analyser la chaîne de nombre et de vérifier si elle est inférieure ou égale à 24
OriginalL'auteur Anirudha
Ce sujet de celui-ci:
Edit: je vous conseille de ne faire que de simples vérifications de RegEx et de tester la justesse sémantique (par exemple. moins de 24) quelque part d'autre que ça devient vraiment compliqué. Le temps aussi de ne pas permettre à 23:74 mais 23:59...
23.75
est valide - je pense que l'OP est à l'aide de "virgule temps" pasHH:MM
OriginalL'auteur da maddin