Regex apenas para números

Não usei expressões regulares, por isso estou com dificuldade em resolver problemas. Eu quero que a expressão regular corresponda apenas quando a cadeia contida é todos os números; mas com os dois exemplos abaixo ela está combinando com uma cadeia que contém todos os números mais um sinal igual como "1234=4321". Tenho a certeza que há uma maneira de mudar este comportamento, mas como disse, Nunca fiz muito com expressões regulares.

string compare = "1234=4321";
Regex regex = new Regex(@"[\d]");

if (regex.IsMatch(compare))
{ 
    //true
}

regex = new Regex("[0-9]");

if (regex.IsMatch(compare))
{ 
    //true
}

no caso de ser importante, estou a usar C# e. NET2. 0.

Author: winner_joiner, 2008-11-07

17 answers

Usa as âncoras de início e fim.

Regex regex = new Regex(@"^\d$");

Utilize "^\d+$" Se precisar de corresponder a mais de um dígito.


Note que "\d" irá corresponder a [0-9] e a outros caracteres como os algarismos árabes Orientais ٠١٢٣٤٥٦٧٨٩. Use "^[0-9]+$" para restringir as correspondências apenas aos algarismos árabes 0-9.


Se precisar de incluir quaisquer representações numéricas que não sejam apenas algarismos( como os valores decimais para começar), então veja @tchrist ' S guia completo para analisar números com expressões regulares .

 402
Author: Bill the Lizard, 2017-05-23 12:26:34

A sua expressão regular irá corresponder a qualquer coisa que contenha um número, deseja usar âncoras para corresponder a toda a cadeia de caracteres e depois corresponder a um ou mais números:

regex = new Regex("^[0-9]+$");

O ^ irá ancorar o início da cadeia, o $ irá ancorar o fim da cadeia, e o + irá corresponder a um ou mais do que o precede (um número neste caso).

 83
Author: Robert Gamble, 2013-12-16 13:24:13

Se for necessário tolerar pontos decimais e Mil marcadores

var regex = new Regex(@"^-?[0-9][0-9,\.]+$");

Você vai precisar de um" -", se o número pode dar negativo.

 29
Author: Andy, 2018-08-22 12:44:36

Corresponde porque está a encontrar "uma correspondência" Não uma correspondência da cadeia completa. Você pode corrigir isso alterando o seu regexp para procurar especificamente o início e o fim da string.

^\d+$
 15
Author: kasperjj, 2008-11-07 18:45:33
Talvez o meu método te ajude.
    public static bool IsNumber(string s)
    {
        return s.All(char.IsDigit);
    }
 13
Author: Raz Megrelidze, 2014-01-21 20:15:59
Isto funciona com números inteiros e decimais. Não corresponde se o número tiver o separador coma Mil,
"^-?\\d*(\\.\\d+)?$"

Algumas cordas que combinam com isto:

894
923.21
76876876
.32
-894
-923.21
-76876876
-.32
Algumas cordas que não ...
hello
9bye
hello9bye
888,323
5,434.3
-8,336.09
87078.
 12
Author: ultraklon, 2016-09-09 10:52:01

^\D+$, que é "start of string", "1 or more digits", "end of string" em inglês.

 11
Author: Mark Brackett, 2008-11-07 18:47:30
Aqui está o meu trabalho.
^(-?[1-9]+\\d*([.]\\d+)?)$|^(-?0[.]\\d*[1-9]+)$|^0$

E alguns testes

Resultados positivos:

string []goodNumbers={"3","-3","0","0.0","1.0","0.1","0.0001","-555","94549870965"};

Testes negativos:

string []badNums={"a",""," ","-","001","-00.2","000.5",".3","3."," -1","--1","-.1","-0"};

Verificado não só para C#, mas também com Java, Javascript e PHP

 10
Author: Marina K., 2015-12-05 15:32:37
Desculpa a formatação feia. Para qualquer número de algarismos:
[0-9]*

Para um ou mais algarismos:

[0-9]+
 8
Author: fnc12, 2014-04-04 09:16:01

Se precisar de verificar se todos os algarismos São número (0-9) ou não,

^[0-9]+$

1425 verdadeiro

0142 TRUE

0 verdadeiro

1 verdadeiro

154a25 FALSE

1234=3254 FALSE

 8
Author: Ujjal Suttra Dhar, 2014-05-22 05:20:17

De outra forma: se gosta de corresponder números internacionais como o persa ou o árabe, por isso pode usar a seguinte expressão:

Regex = new Regex(@"^[\p{N}]+$");

Para corresponder à utilização literal do carácter do período:

Regex = new Regex(@"^[\p{N}\.]+$");
 4
Author: S.M.Mousavi, 2012-04-28 21:38:10

Usar âncoras de início e fim.

 Regex regex = new Regex(@"^\d$");
 Use "^\d+$" if you need to match more than one digit.
 3
Author: lipika chakraborty, 2016-07-06 10:42:00
Embora nenhuma das soluções acima se encaixasse no meu propósito, isto funcionou comigo.
var pattern = @"^(-?[1-9]+\d*([.]\d+)?)$|^(-?0[.]\d*[1-9]+)$|^0$|^0.0$";
return Regex.Match(value, pattern, RegexOptions.IgnoreCase).Success;

Exemplo de valores válidos: "3", "-3", "0", "0.0", "1.0", "0.7", "690.7", "0.0001", "-555", "945465464654"

Exemplo de valores não válidos: "a", "", " ", ".", "-", "001", "00.2", "000.5", ".3", "3.", " -1", "--1", "-.1", "-0", "00099", "099"

 3
Author: Daniele D., 2016-09-12 08:51:34
Penso que este é o mais simples e aceita a forma Europeia e americana de escrever números, por exemplo, EUA 10.555, 12 Europeu 10.555, 12 Também este não permite várias vírgulas ou pontos um após o outro, por exemplo, 10..22 ou 10.22 Além destes números como .55 ou, 55 passaria. Isto pode ser útil.
^([,|.]?[0-9])+$
 2
Author: Azur, 2016-09-01 08:10:59

Regex para números inteiros e pontos flutuantes:

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

Um número pode começar por um período (sem algarismos iniciais), e um número pode terminar com um período (sem carateres). Acima da regex reconhecerá ambos como números corretos. A. (período) Ele mesmo sem quaisquer dígitos não é um número correto. É por isso que precisamos de duas partes regexas (separadas com um "|").

Espero que isto ajude.
 1
Author: Tagar, 2016-02-22 04:11:02

Se quiser extrair apenas números de uma cadeia de caracteres, o padrão "\d+" deverá ajudar.

 0
Author: James Selvakumar, 2010-11-03 09:50:59

Regex regex = novo Regex ("^[0-9]{1,4}=[0-9]{1,4]$")

 -2
Author: Giri babu vuppula, 2015-05-01 22:56:14