2013-08-09 3 views
-3

Comment puis-je modifier cette expression régulière pour autoriser des nombres avec un seul point?Autoriser un seul point dans les nombres décimaux

/[^0-9\.]/g 

Il permet actuellement:

  • 0,13
  • 0.13.1 (cela ne devrait pas être admissible)
+1

Il y a tellement de questions similaires liées à la droite de cette page. Vous ne les avez pas vus quand vous écriviez votre question? –

+1

Vous n'avez pas besoin d'échapper un point dans une classe de caractères – HamZa

+0

@dystroy, j'ai fait une recherche approfondie avant de poster, mais aucun fourni une réponse satisfaisante. et aucun sur le bon point à ce que je demande –

Répondre

8

Votre expression régulière ne correspond pas à ce que vous dites. Vous avez utilisé négation dans la classe de caractères, et cela aussi sans aucun quantificateur. Actuellement, il correspond à tout autre caractère autre que ..

Pour vos besoins, vous pouvez utiliser cette regex:

/^\d+(\.\d+)?$/ 
+0

+1 comme vous avez obtenu à la bonne réponse d'abord (pas la première réponse, mais j'ai vu les modifications) :) –

+0

'/ ^(\d+|\d+\.\d+)$/'est-ce une syntaxe correcte? – rps

+0

@rps: Non, les parenthèses et les espaces n'appartiennent pas. – Ryan

4

Faire le match positif:

/^\d*(\.\d+)?$/ 

N'importe quel nombre de chiffres, éventuellement suivi d'un point et d'au moins un chiffre. Mais ça ne vaut pas le coup de garder un match négatif.

Si vous voulez interdire une chaîne vide (l'expression régulière originale ne ferait pas), vous pouvez le faire:

/^(?=.)\d*(\.\d+)?$/ 

Mais vous pouvez aussi simplement vérifier une chaîne vide, ce qui semble mieux de toute façon.

+1

Cela correspond même à une chaîne vide. – HamZa

+0

@HamZa: Mais qui sait. – Ryan

+0

Fondamentalement, une mauvaise question n'obtient pas une réponse complète. Il devrait y avoir un dup si ... – HamZa

-1

les opérations suivantes:

/^(\d*)(\.\d*)?$/g 
+2

Les groupes correspondants sont inutiles – HamZa

+0

pas si vous voulez les vérifier manuellement ... qui sait quel est son cas d'utilisation – Derek

+0

Faire '\ d *' optionnel ne fait rien non plus, cela permet la chaîne vide, cela permet un point unique. Mais qui sait. – Ryan

-1

Essayez,

(value.match(/^\d+([.]\d{0,1})?$/)) 
+0

'[.]' → '\ .'; '{0,1}' → '?'; 'value.match (x)' → 'x.test (valeur)' – Ryan

0

Vous pouvez essayer les regex suivante^[- +]? \ d *.? \ d * $

0

Je suppose que cela devrait faire /^(\d*)\.{0,1}(\d){0,1}$/ OU /^(\d*)\.?(\d){0,1}$/

(\d*) Représente le nombre de chiffres avant la virgule.

\. suivi de {0,1} OU ? s'assurera qu'il n'y a qu'un seul point.

(\d){0,1} Autorise uniquement un chiffre après la virgule.

Questions connexes