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

user1786107
la source
1
@DanPuzey Vous n'avez pas vu le Regex qu'il a posté?
Nolonar
regexper.com
Dave Bish
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.

Mike Perrenoud
la source
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}$
KF2
la source
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+)?$
André Calil
la source
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
Pacho Zuñiga
la source
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+)?$
Ian Timothy
la source
1

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

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

Prajwal Rai
la source
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+

Aditya Kresna Permana
la source
0

Ajoutez simplement un jeton 0 ou 1:

^-?[0-9]\d*(.\d+)?$
BanksySan
la source
André m'a battu, il a raison aussi, pas besoin de jeton [0-9].
BanksySan
0

Pour un nombre négatif uniquement, c'est parfait.

^-\d*\.?\d+$
Kamleshkumar Gujarathi
la source
0
^[+-]?\d{1,18}(\.\d{1,2})?$

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

Deepak Tambe
la source
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

Vivesh
la source
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
alchimiste
la source
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);

Basilic
la source