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 es todos los números; pero con los dos ejemplos a continuación, coincide con 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 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.

Author: winner_joiner, 2008-11-07

17 answers

Utilice los anclajes de inicio y fin.

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

Use "^\d+$" si necesita coincidir con 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 solo a los números arábigos 0 - 9.


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

 402
Author: Bill the Lizard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:34

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

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

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

 83
Author: Robert Gamble,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-16 13:24:13

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.

 29
Author: Andy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-22 12:44:36

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

^\d+$
 15
Author: kasperjj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 18:45:33

Tal vez mi método te ayude.

    public static bool IsNumber(string s)
    {
        return s.All(char.IsDigit);
    }
 13
Author: Raz Megrelidze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-21 20:15:59

Esto funciona con números enteros y decimales. No coincide si el número tiene el separador de 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.
 12
Author: ultraklon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-09 10:52:01

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

 11
Author: Mark Brackett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-07 18:47:30

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

 10
Author: Marina K.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-05 15:32:37

Lo siento por el formato feo. Para cualquier número de dígitos:

[0-9]*

Para uno o más dígitos:

[0-9]+
 8
Author: fnc12,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-04 09:16:01

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

^[0-9]+$

1425 VERDADERO

0142 VERDADERO

0 VERDADERO

1 VERDADERO

154a25 FALSE

1234 = 3254 FALSE

 8
Author: Ujjal Suttra Dhar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-22 05:20:17

Otra forma: Si te gusta hacer coincidir números internacionales como persa o árabe, puedes usar la siguiente expresión:

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

Para coincidir con el carácter literal del período use:

Regex = new Regex(@"^[\p{N}\.]+$");
 4
Author: S.M.Mousavi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-28 21:38:10

Utilice anclajes iniciales y finales.

 Regex regex = new Regex(@"^\d$");
 Use "^\d+$" if you need to match more than one digit.
 3
Author: lipika chakraborty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-06 10:42:00

Mientras que 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: "un", "", " ", ".", "-", "001", "00.2", "000.5", ".3", "3.", " -1", "--1", "-.1", "-0", "00099", "099"

 3
Author: Daniele D.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-12 08:51:34

Creo que este es el más simple y acepta la forma europea y estadounidense de escribir números, por ejemplo, USA 10,555. 12 European 10.555,12 Además, este no permite varias comas o puntos uno después del otro, por ejemplo, 10..22 o 10,.22 Además de estos números como .55 o, 55 pasaría. Esto puede ser útil.

^([,|.]?[0-9])+$
 2
Author: Azur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-01 08:10:59

Regex para números enteros y puntos flotantes:

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

Un número puede comenzar con un punto (sin dígitos iniciales(s)), y un número puede terminar con un punto (sin dígitos finales). Arriba regex reconocerá ambos como números correctos. Un . (punto) en sí mismo sin dígitos no es un número correcto. Es por eso que necesitamos dos partes regex allí (separadas con una "|").

Espero que esto ayude.

 1
Author: Tagar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-22 04:11:02

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

 0
Author: James Selvakumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-03 09:50:59

Regex regex = nueva Regex ("^[0-9]{1,4}=[0-9]{1,4]$")

 -2
Author: Giri babu vuppula,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-01 22:56:14