only - regex not number c#




Regex apenas para números (12)

Eu não usei expressões regulares, então estou tendo dificuldades para solucionar problemas. Eu quero o regex para corresponder apenas quando a seqüência contida é todos os números; mas com os dois exemplos abaixo está correspondendo 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 seja importante, estou usando o C # e o .NET2.0.


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]+

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])+$

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 coincidir com o uso do caractere de período literal:

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

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ê 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.


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


Seu 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).


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.


use âncoras de início e fim.

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




.net-2.0