Não usei expressões regulares, por isso estou tendo dificuldades para solucionar problemas. Quero que a regex corresponda apenas quando a string contida for todos os números; mas com os dois exemplos abaixo, ele corresponde a uma sequência que contém todos os números, além de um sinal de igual como "1234 = 4321". Tenho certeza de que há uma maneira de mudar esse comportamento, mas como eu 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
}
Caso isso importe, estou usando C # e .NET2.0.
Respostas:
Use as âncoras inicial e final.
Use
"^\d+$"
se precisar corresponder a mais de um dígito.Observe que
"\d"
coincidirá com[0-9]
outros caracteres de dígito, como os algarismos arábicos orientais٠١٢٣٤٥٦٧٨٩
. Use"^[0-9]+$"
para restringir as correspondências apenas aos algarismos arábicos 0 - 9.Se você precisar incluir outras representações numéricas que não sejam apenas dígitos (como valores decimais para iniciantes), consulte o guia abrangente do @tchrist para analisar números com expressões regulares .
fonte
"^\d{6}$"
. Alguns outros países têm regras mais complicadas para códigos postais, portanto, as soluções regex para vários países também podem ser bastante complicadas. Confira alguns dos exemplos em stackoverflow.com/q/578406/1288Sua regex corresponderá a qualquer coisa que contenha um número. Você deseja usar âncoras para corresponder a toda a cadeia e, em seguida, corresponder a um ou mais números:
O
^
ancorará o início da sequência, o$
final da sequência e+
corresponderá a um ou mais do que a precede (um número nesse caso).fonte
Se você precisar tolerar o ponto decimal e o marcador de milhar
Você precisará de um "-", se o número puder ser negativo.
fonte
-
) e o período (.
) ocorram mais de uma vez.-
e.
opcional via?
.-?\d+(?:\.\d+)?
corresponderia a números inteiros ou decimais. (The?:
nos parênteses só faz os parênteses um grupo não-captura e usados para único grupo para maior clareza.)^-?[0-9][0-9,\.]*$
evitar falhas no caso básico. + é substituído por *É compatível porque está encontrando "uma correspondência", não uma correspondência da cadeia completa. Você pode corrigir isso alterando seu regexp para procurar especificamente o início e o fim da string.
fonte
Talvez meu método o ajude.
fonte
Char.IsDigit
retornatrue
para qualquer caractere membro da categoria UnicodeCategory.DecimalDigitNumber . Pode não ser o que o OP deseja. Veja também Por que Char.IsDigit retorna true para caracteres que não podem ser analisados para int? .Isso funciona com números inteiros e decimais. Não corresponde se o número tiver o separador de milhar em coma,
algumas strings que combinam com isso:
algumas strings que não:
fonte
^ \ d + $, que é "início da sequência", "1 ou mais dígitos", "final da sequência" em inglês.
fonte
Se você precisar verificar se todos os dígitos são números (0-9) ou não,
1425 TRUE
0142 TRUE
0 VERDADEIRO
1 VERDADEIRO
154a25 FALSE
1234 = 3254 FALSO
fonte
Aqui está o meu trabalho:
E alguns testes
Testes positivos:
Testes negativos:
Verificado não apenas em C #, mas também em Java, Javascript e PHP
fonte
Desculpe pela formatação feia. Para qualquer número de dígitos:
Para um ou mais dígitos:
fonte
Embora nenhuma das soluções acima atendesse ao meu objetivo, isso funcionou para mim.
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"
fonte
Outra maneira: se você deseja combinar números internacionais como persa ou árabe, use a seguinte expressão:
Para corresponder o caractere de período literal, use:
fonte
use âncoras de início e de fim.
fonte
Regex para números inteiros e de ponto flutuante:
Um número pode começar com um ponto (sem dígitos iniciais) e um número pode terminar com um ponto (sem dígitos finais). Regex acima reconhecerá ambos como números corretos.
UMA . (ponto) em si, sem dígitos, não é um número correto. É por isso que precisamos de duas partes de regex lá (separadas por um "|").
Espero que isto ajude.
fonte
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 Além disso, este não permite várias vírgulas ou pontos um após o outro, por exemplo, 10..22 ou 10, .22 Além desses números, como 0,55 ou 55, passaria. Isso pode ser útil.
fonte
Se você deseja extrair apenas números de uma sequência, o padrão "\ d +" deve ajudar.
fonte
Regex regex = new Regex ("^ [0-9] {1,4} = [0-9] {1,4] $")
fonte