Regex solo para números

No he utilizado expresiones regulares en absoluto, así que estoy teniendo dificultades para solucionar problemas. Quiero que la expresión regular coincida solo cuando la cadena contenida sea de números; pero con los dos ejemplos a continuación, está haciendo coincidir una cadena que contiene todos los números más un signo igual como “1234 = 4321”. Estoy seguro de que hay una manera de cambiar este comportamiento, pero como dije, nunca hice mucho con 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.

Use los anclajes de inicio y final.

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

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


Tenga en cuenta que "\d" coincidirá con [0-9] y otros caracteres de dígitos como los números arábigos orientales ٠١٢٣٤٥٦٧٨٩ . Use "^[0-9]+$" para restringir las coincidencias a solo los números arábigos 0 – 9.


Si necesita incluir representaciones numéricas que no sean solo dígitos (como valores decimales para principiantes), consulte la guía completa de @tchrist para analizar números con expresiones regulares .

Su expresión regular coincidirá con cualquier elemento que contenga un número, desea usar anclajes para hacer coincidir toda la cadena y luego hacer coincidir uno o más números:

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

El ^ anclará el comienzo 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).

Si necesita tolerar el punto decimal y el marcador de mil

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

Necesitará un “-“, si el número puede ser negativo.

Coincide porque encuentra “una coincidencia”, no una coincidencia de la cadena completa. Puede solucionar esto cambiando su expresión regular para buscar específicamente el principio y el final de la cadena.

 ^\d+$ 

Tal vez mi método te ayude.

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

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

Esto funciona con enteros y números decimales. No coincide si el número tiene el separador coma mil,

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

algunas cadenas que coinciden con esto:

 894 923.21 76876876 .32 -894 -923.21 -76876876 -.32 

algunas cadenas que no:

 hello 9bye hello9bye 888,323 5,434.3 -8,336.09 87078. 

Aquí está mi trabajo:

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

Y algunas pruebas

Pruebas positivas:

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

Pruebas negativas:

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

Comprobado no solo para C #, sino también con Java, Javascript y PHP

Perdón por el feo formato. Para cualquier cantidad de dígitos:

 [0-9]* 

Para uno o más dígitos:

 [0-9]+ 

Si necesita verificar si todos los dígitos son el número (0-9) o no,

 ^[0-9]+$ 

1425 VERDADERO

0142 VERDADERO

0 VERDADERO

1 VERDADERO

154a25 FALSO

1234 = 3254 FALSO

Otra forma: si desea hacer coincidir números internacionales como el persa o el árabe, puede usar la siguiente expresión:

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

Para hacer coincidir el uso del carácter del período literal:

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

usa anclajes de inicio y final.

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

Si bien ninguna de las soluciones anteriores se ajustaba a mi propósito, esto funcionó para mí.

 var pattern = @"^(-?[1-9]+\d*([.]\d+)?)$|^(-?0[.]\d*[1-9]+)$|^0$|^0.0$"; return Regex.Match(value, pattern, RegexOptions.IgnoreCase).Success; 

Ejemplo de valores válidos: “3”, “-3”, “0”, “0.0”, “1.0”, “0.7”, “690.7”, “0,0001”, “-555”, “945465464654”

Ejemplo de valores no válidos: “a”, “”, “”, “.”, “-“, “001”, “00.2”, “000.5”, “.3”, “3.”, “-1” , “–1”, “-.1”, “-0”, “00099”, “099”

Creo que este es el más simple y acepta la manera europea y americana de escribir números, por ejemplo, EE. UU. 10,555.12 Europeo 10,555,12 Además, este no permite varias comas o puntos, uno detrás de otro, por ejemplo, 10..22 o 10, .22 Además de esto, pasarían números como .55 o, 55. Esto puede ser útil.

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

Regex para números enteros y números de punto de fuga:

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

Un número puede comenzar con un punto (sin dígitos iniciales), y un número puede terminar con un punto (sin dígitos posteriores). Por encima de regex reconocerá ambos como números correctos. A . (punto) sin dígitos no es un número correcto. Es por eso que necesitamos dos partes de expresiones regulares allí (separadas por un “|”).

Espero que esto ayude.

Si desea extraer solo números de una cadena, el patrón “\ d +” debería ayudar.

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