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

user1786107
fonte
1
@DanPuzey Você não viu o Regex que ele postou?
Nolonar
regexper.com
Dave Bish
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.

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

Isso permitirá números inteiros positivos e negativos

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

Prajwal Rai
fonte
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+

Aditya Kresna Permana
fonte
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);

Manjericão
fonte
0

Basta adicionar um token 0 ou 1:

^-?[0-9]\d*(.\d+)?$
BanksySan
fonte
Andre me venceu, ele também está certo, não há necessidade do token [0-9].
BanksySan
0

Apenas para números negativos, isso é perfeito.

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

aceita valores decimais positivos ou negativos.

Deepak Tambe
fonte
0

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

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

funciona para inteiro negativo, decimal, negativo com decimal

vivesh
fonte
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
alquimista
fonte