Como faço para incluir números decimais negativos nesta expressão regular?


90

Como faço para combinar números negativos também por esta expressão regular? Esta regex funciona bem com valores positivos, mas eu quero que ela também permita valores negativos, por exemplo, -10, -125,5 etc.

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

obrigado


1
@DanPuzey Você não viu o Regex que ele postou?
Nolonar


Tentei adicionar [-] no início, mas não funcionou. Também tentei uma combinação de pequenas mudanças
user1786107

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

@DanPuzey, suas palavras não acrescentam nada à discussão e são indelicadas
Wassadamo

Respostas:


176

Você deve adicionar um hífen opcional no início, adicionando -?( ?é um quantificador que significa uma ou nenhuma ocorrência ):

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

Eu verifiquei no Rubular com estes valores:

10.00
-10.00

e ambos corresponderam conforme o esperado.


2
você deve escapar do ponto, ou seja^-?[0-9]\d*(\.\d+)?$
Alex Shesterov

14
Se houver a necessidade de capturar explicitamente números positivos (+10,00, usado em alguns aplicativos), você pode usar^[-+]?[0-9]\d*(\.\d+)?$
Cemafor

129

Alguns exemplos de expressões regulares:

Inteiros positivos :

^\d+$

Inteiros negativos :

^-\d+$

Inteiro :

^-?\d+$

Número positivo :

^\d*\.?\d+$

Número Negativo :

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

Número positivo ou número negativo :

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

Número de telefone :

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

Telefone com código :

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

Ano 1900-2099 :

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

Data (dd mm aaaa, d / 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

Eu não sei por que você precisa disso primeiro [0-9].

Experimentar:

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

Atualizar

Se você quiser ter certeza de que terá um dígito na casa de uns, use

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

1
Provavelmente apenas para garantir um dígito no lugar ^-?\d+(\.\d+)?$das
unidades

Resposta mais adequada. Não acho que [0-9] seja necessário conforme mostrado na resposta aceita.
UzumakiL

3

ATUALIZADO (13/08/2014): Este é o melhor código para números positivos e negativos =)

(^-?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}

Tentei com estes números e funcionou bem:

-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

Mude -*para -?porque corresponde -------------.
Toto

Fiz algumas alterações adicionais e agora funciona bem. Verifique se =)
Pacho Zuñiga

1

Isso permitirá um caractere -ou +apenas quando seguido por um número:

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

1

Isso permitirá números inteiros positivos e negativos

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


1

Tenho alguns experimentos sobre regex em django url, que exigem números negativos a positivos

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

Vamos nos concentrar nesta (\-\d+|\d+)parte e ignorar as outras, este ponto e vírgula |significa OR em regex, então o valor negativo corresponderá a esta \-\d+parte, e o valor positivo a esta\d+



1

Se você tem isso val="-12XXX.0abc23"e deseja extrair apenas o número decimal, neste caso este regex ( ^-?[0-9]\d*(\.\d+)?$) não o ajudará a consegui-lo.
este é o código adequado com a regex de detecção correta:

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


0

Basta adicionar um token 0 ou 1:

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

Andre me venceu, ele também está certo, não há necessidade do token [0-9].
BanksySan


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

aceita valores decimais positivos ou negativos.


0

Expressão regular para número, ponto decimal opcional, negativo opcional:

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

funciona para inteiro negativo, decimal, negativo com decimal


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

permitir:

23425.23425
10.10
100
0
0.00
-100
-10.10
10.-10
-10.-10
-23425.23425
-23425.-23425
0.234
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.