161 votos

Regex sólo para números

No he utilizado expresiones regulares en absoluto, por lo que estoy teniendo dificultades para solucionar el problema. Quiero que la expresión regular coincida sólo cuando la cadena contenida es todos los números, pero con los dos ejemplos de abajo está coincidiendo con una cadena que contiene todos los números más un signo de igualdad como "1234=4321". Estoy seguro de que hay una manera de cambiar este comportamiento, pero como he dicho, nunca he hecho mucho con las expresiones 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
}

En caso de que importe, estoy usando C# y .NET2.0.

281voto

Bill the Lizard Puntos 147311

Utiliza los anclajes del principio y del final.

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

Utilice "^\d+$" si necesita hacer coincidir más de un dígito.


Tenga en cuenta que "\d" coincidirá con [0-9] y otros caracteres numéricos como los números arábigos orientales ٠١٢٣٤٥٦٧٨٩ . Utilice "^[0-9]+$" para restringir las coincidencias a los números arábigos del 0 al 9.


Si necesita incluir alguna representación numérica que no sea sólo dígitos (como los valores decimales para empezar), entonces vea @tchrist 's guía completa para analizar números con expresiones regulares .

57voto

Robert Gamble Puntos 41984

Su regex coincidirá con cualquier cosa que contenga un número, usted quiere usar anclas para coincidir con toda la cadena y luego coincidir con uno o más números:

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

El ^ anclará el principio de la cadena, el $ anclará el final de la cadena, y el + coincidirá con uno o más de lo que le precede (un número en este caso).

18voto

Andy Puntos 1118

si necesita tolerar el punto decimal y el marcador de mil...

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

actualizar: necesitará "-", si el número puede ser negativo. actualizar: se ha movido el "-" al principio para evitar que coincida con el "-" que no empieza

12voto

kasperjj Puntos 2726

Está coincidiendo porque está encontrando "una coincidencia" no una coincidencia de la cadena completa. Puede solucionar esto cambiando su regexp para buscar específicamente el principio y el final de la cadena.

^\d+$

9voto

Mark Brackett Puntos 46824

^ \d +$, que es "inicio de cadena", "1 o más dígitos", "fin de cadena" en inglés.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X