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+)?$/