Comment inclure des nombres décimaux négatifs dans cette expression régulière?


89

Comment faire correspondre également des nombres négatifs avec cette expression régulière? Cette expression régulière fonctionne bien avec des valeurs positives, mais je veux qu'elle autorise également les valeurs négatives, par exemple -10, -125,5, etc.

^[0-9]\d*(\.\d+)?$

Merci


1
@DanPuzey Vous n'avez pas vu le Regex qu'il a posté?
Nolonar


j'ai essayé d'ajouter [-] au début mais cela n'a pas fonctionné. J'ai aussi essayé une combinaison de petits changements
user1786107

essayez ceci ^ -? \ d + (\. \ d +)? $
Civa

@DanPuzey vos mots n'ajoutent rien à la discussion et sont
méchants

Réponses:


173

Vous devez ajouter un trait d'union facultatif au début en ajoutant -?( ?est un quantificateur signifiant une ou zéro occurrence ):

^-?[0-9]\d*(\.\d+)?$

Je l'ai vérifié dans Rubular avec ces valeurs:

10.00
-10.00

et les deux correspondaient comme prévu.


2
vous devriez échapper au point, c'est^-?[0-9]\d*(\.\d+)?$
Alex Shesterov

14
S'il y a un besoin potentiel de capturer des nombres explicitement possibles (+10,00, utilisé dans certaines applications), vous pouvez utiliser^[-+]?[0-9]\d*(\.\d+)?$
Cemafor

127

Quelques exemples d'expressions régulières:

Entiers positifs :

^\d+$

Entiers négatifs :

^-\d+$

Entier :

^-?\d+$

Nombre positif :

^\d*\.?\d+$

Nombre négatif :

^-\d*\.?\d+$

Nombre positif ou nombre négatif :

^-?\d*\.{0,1}\d+$

Numéro de téléphone :

^\+?[\d\s]{3,}$

Téléphone avec code :

^\+?[\d\s]+\(?[\d\s]{10,}$

Année 1900-2099 :

^(19|20)[\d]{2,2}$

Date (jj mm aaaa, j / m / aaaa, etc.):

^([1-9]|0[1-9]|[12][0-9]|3[01])\D([1-9]|0[1-9]|1[012])\D(19[0-9][0-9]|20[0-9][0-9])$

IP v4 :

^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]){3}$

11

Je ne sais pas pourquoi vous en avez besoin en premier [0-9].

Essayer:

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

Mise à jour

Si vous voulez être sûr d'avoir un chiffre à la place de ceux, utilisez

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

1
Probablement juste pour garantir un chiffre à la place des ^-?\d+(\.\d+)?$
unités

Réponse la plus appropriée. Je ne pense pas que [0-9] soit nécessaire comme indiqué dans la réponse acceptée.
UzumakiL

3

MISE À JOUR (13/08/2014): C'est le meilleur code pour les nombres positifs et négatifs =)

(^-?0\.[0-9]*[1-9]+[0-9]*$)|(^-?[1-9]+[0-9]*((\.[0-9]*[1-9]+[0-9]*$)|(\.[0-9]+)))|(^-?[1-9]+[0-9]*$)|(^0$){1}

J'ai essayé avec ces chiffres et fonctionne bien:

-1234454.3435
-98.99
-12.9
-12.34
-10.001
-3
-0.001
-000
-0.00
0
0.00
00000001.1
0.01
1201.0000001
1234454.3435
7638.98701

Changez -*pour -?parce qu'il correspond -------------.
Toto

J'ai apporté quelques modifications supplémentaires et fonctionne maintenant très bien. Veuillez vérifier que =)
Pacho Zuñiga

1

Cela n'autorisera un caractère -ou +que s'il est suivi d'un nombre:

 ^([+-](?=\.?\d))?(\d+)?(\.\d+)?$

1

Cela permettra à la fois des entiers positifs et négatifs

ValidationExpression = "^ -? [0-9] \ d * (\ d +)? $"


1

J'ai quelques expériences sur les regex dans django url, qui nécessitaient des nombres négatifs à positifs

^(?P<pid>(\-\d+|\d+))$

Concentrons-nous sur cette (\-\d+|\d+)partie et ignorons les autres, ce point-virgule |signifie OU dans l'expression régulière, alors la valeur négative correspondra à cette \-\d+partie et la valeur positive dans cette\d+



0

Ajoutez simplement un jeton 0 ou 1:

^-?[0-9]\d*(.\d+)?$

André m'a battu, il a raison aussi, pas besoin de jeton [0-9].
BanksySan


0
^[+-]?\d{1,18}(\.\d{1,2})?$

accepte les valeurs décimales positives ou négatives.


0

Expression régulière pour nombre, point décimal facultatif, négatif facultatif:

^-?(\d*\.)?\d+$;

fonctionne pour un entier négatif, décimal, négatif avec décimal


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

Autoriser:

23425.23425
10.10
100
0
0.00
-100
-10.10
10.-10
-10.-10
-23425.23425
-23425.-23425
0.234

0

Si vous avez ceci val="-12XXX.0abc23"et que vous voulez extraire uniquement le nombre décimal, dans ce cas, cette regex ( ^-?[0-9]\d*(\.\d+)?$) ne vous aidera pas à y parvenir.
c'est le bon code avec la bonne regex de détection:

var val="-12XXX.0abc23";
val = val.replace(/^\.|[^-?\d\.]|\.(?=.*\.)|^0+(?=\d)/g, '');
console.log(val);

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.