Regex ne permet qu'un seul point dans une zone de texte

J'ai une entrée de texte.

J'ai écrit un regex pour masquer tous les caractères spéciaux sauf . Et - . Maintenant, si par erreur l'utilisateur entre deux . (Points) en entrée, puis avec le regex actuel

 var valueTest='225..36' valueTest.match(/[^-.\d]/) 

Je m'attendais à ce que le nombre ne dépasse pas cette condition

Comment gérer cette affaire. Je veux juste un . (Point) dans le champ de saisie car il s'agit d'un nombre.

Je pense que vous voulez dire cela,

 ^-?\d+(?:\.\d+)?$ 

DEMO

Il permet des nombres positifs et négatifs avec ou sans virgule.

Explication:

  • ^ Affirme que nous sommes au début.
  • -? Facultatif - symbole.
  • \d+ Correspond à un ou plusieurs nombres.
  • (?: Début du groupe de non-capture.
  • \. Correspond à un point littéral.
  • \d+ Correspond à un ou plusieurs nombres.
  • ? Rend l'ensemble du groupe non capturé comme facultatif.
  • $ Affirme que nous sommes à la fin.

Si vous voulez simplement gérer le numéro, vous pouvez essayer ceci:

 valueTest.match(/^-?\d+(\.\d+)?$/) 

Vous pouvez probablement éviter complètement le regex avec ce cas.

Par exemple

 String[] input = { "225.36", "225..36","-225.36", "-225..36" }; for (String s : input) { try { Double d = Double.parseDouble(s); System.out.printf("\"%s\" is a number.%n", s); } catch (NumberFormatException nfe) { System.out.printf("\"%s\" is not a valid number.%n", s); } } 

Sortie

 "225.36" is a number. "225..36" is not a valid number. "-225.36" is a number. "-225..36" is not a valid number. 

Utiliser ci-dessous reg ex il répond à vos besoins.

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