Regex apenas para números

Eu não usei expressões regulares, então estou tendo dificuldades para solucionar problemas. Eu quero que o regex corresponda apenas quando a string contida é todos os números; mas com os dois exemplos abaixo, ele está combinando uma string que contém todos os números, mais um sinal de igual como “1234 = 4321”. Tenho certeza de que há uma maneira de mudar esse comportamento, mas, como eu disse, nunca fiz muita coisa 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 } 

Caso isso seja importante, estou usando o C # e o .NET2.0.

Use as âncoras de início e fim.

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

Use "^\d+$" se você precisar corresponder a mais de um dígito.


Observe que "\d" corresponderá a [0-9] e outros caracteres de dígito, como os algarismos arábicos orientais ٠١٢٣٤٥٦٧٨٩ . Use "^[0-9]+$" para restringir as correspondências apenas aos algarismos arábicos de 0 a 9.


Se você precisar include quaisquer representações numéricas diferentes de apenas dígitos (como valores decimais para iniciantes), consulte o guia completo do @tchrist para analisar números com expressões regulares .

Sua regex corresponderá a qualquer coisa que contenha um número, você desejará usar âncoras para corresponder à string inteira e depois corresponder a um ou mais números:

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

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

Se você precisa tolerar o ponto decimal e o marcador de mil

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

Você precisará de um “-“, se o número puder ficar negativo.

Ele está correspondendo porque está encontrando “uma correspondência” e não uma correspondência da sequência completa. Você pode corrigir isso alterando seu regexp para procurar especificamente o início e o fim da string.

 ^\d+$ 

Talvez meu método te ajude.

  public static bool IsNumber(string s) { return s.All(char.IsDigit); } 

^ \ d + $, que é “início da cadeia”, “1 ou mais dígitos”, “fim da cadeia” em inglês.

Isso funciona com números inteiros e decimais. Não combina se o número tem o coma mil separador,

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

algumas cordas que combinam com isso:

 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. 

Aqui está o meu trabalho:

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

E alguns testes

Testes 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ó por C #, mas também com Java, Javascript e PHP

Desculpe pela formatação feia. Para qualquer número de dígitos:

 [0-9]* 

Para um ou mais dígitos:

 [0-9]+ 

Se você precisa verificar se todos os dígitos são números (0-9) ou não,

 ^[0-9]+$ 

1425 TRUE

0142 TRUE

0 TRUE

1 TRUE

154a25 FALSO

1234 = 3254 FALSE

Outra maneira: se você gosta de combinar números internacionais como persa ou árabe, você pode usar a seguinte expressão:

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

Para corresponder ao uso de caractere de período literal:

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

use âncoras de início e fim.

  Regex regex = new Regex(@"^\d$"); Use "^\d+$" if you need to match more than one digit. 

Embora nenhuma das soluções acima fosse adequada ao meu propósito, isso funcionou para mim.

 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”

Eu acho que este é o mais simples e aceita o modo europeu e americano 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 disso, números como 0,55 ou 55 passariam. Isso pode ser útil.

 ^([,|.]?[0-9])+$ 

Regex para números inteiros e de ponto de floting:

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

Um número pode começar com um período (sem dígitos iniciais) e um número pode terminar com um período (sem dígitos no final). Acima regex irá reconhecer ambos como números corretos. UMA . (período) em si sem quaisquer dígitos não é um número correto. É por isso que precisamos de duas partes de regex (separadas por um “|”).

Espero que isto ajude.

Se você quiser extrair apenas números de uma string, o padrão “\ d +” deve ajudar.

Regex regex = new Regex (“^ [0-9] {1,4} = [0-9] {1,4] $”)