No he usado expresiones regulares en absoluto, así que tengo dificultades para solucionar problemas. Quiero que la expresión regular coincida solo cuando la cadena contenida sea 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 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 sea importante, estoy usando C # y .NET2.0.
Respuestas:
Use los anclajes de inicio y fin.
Úselo
"^\d+$"
si necesita hacer coincidir más de un dígito.Tenga en cuenta que
"\d"
coincidirá[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 del 0 al 9.Si es necesario incluir ningún representaciones numéricas que no sean dígitos sólo como valores decimales (para empezar), y luego ver @tchrist 's guía completa de análisis de números con expresiones regulares .
fuente
"^\d{6}$"
. Algunos otros países tienen reglas más complicadas para los códigos postales, por lo que las soluciones de expresiones regulares para varios países también pueden ser bastante complicadas. Vea algunos de los ejemplos en stackoverflow.com/q/578406/1288Su expresión regular coincidirá con cualquier cosa que contenga un número, desea usar anclas para que coincida con toda la cadena y luego coincida con uno o más números:
El
^
anclará el principio de la cadena, el$
anclará el final de la cadena, y la+
coincidirá con uno o más de lo que lo precede (un número en este caso).fuente
Si necesita tolerar el punto decimal y mil marcadores
Necesitará un "-", si el número puede ser negativo.
fuente
-
) y el punto (.
) ocurran más de una vez.-
y.
opcional a través de?
.-?\d+(?:\.\d+)?
coincidiría con enteros o decimales. (El?:
de los parens sólo hace que los parens un grupo no capturar y utilizados para único grupo para mayor claridad.)^-?[0-9][0-9,\.]*$
para evitar fallar en el caso básico. + se reemplaza con *Es coincidente 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.
fuente
Quizás mi método te ayude.
fuente
Char.IsDigit
devuelvetrue
cualquier carácter que sea miembro de la categoría UnicodeCategory.DecimalDigitNumber . Esto puede no ser lo que quiere el OP. Consulte también ¿Por qué Char.IsDigit devuelve verdadero para los caracteres que no se pueden analizar en int? .Esto funciona con enteros y números decimales. No coincide si el número tiene el separador de coma mil,
algunas cadenas que coinciden con esto:
algunas cadenas que no:
fuente
^ \ d + $, que es "inicio de cadena", "1 o más dígitos", "fin de cadena" en inglés.
fuente
Si necesita verificar si todos los dígitos son números (0-9) o no,
1425 VERDADERO
0142 VERDADERO
0 VERDADERO
1 VERDADERO
154a25 FALSO
1234 = 3254 FALSO
fuente
Aquí está mi trabajo:
Y algunas pruebas
Pruebas positivas:
Pruebas negativas:
Comprobado no solo para C #, sino también con Java, Javascript y PHP
fuente
Perdón por el formato feo. Para cualquier número de dígitos:
Para uno o más dígitos:
fuente
Si bien ninguna de las soluciones anteriores se ajustaba a mi propósito, esto funcionó para mí.
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"
fuente
Otra forma: si desea unir números internacionales como el persa o el árabe, puede usar la siguiente expresión:
Para coincidir con el uso de caracteres de período literal:
fuente
use anclajes iniciales y finales.
fuente
Regex para números enteros y de coma flotante:
Un número puede comenzar con un punto (sin dígitos iniciales), y un número puede terminar con un punto (sin dígitos finales). Por encima de la expresión regular reconocerá ambos como números correctos.
A . (punto) en sí mismo sin ningún dígito no es un número correcto. Es por eso que necesitamos dos partes de expresiones regulares allí (separadas con un "|").
Espero que esto ayude.
fuente
Creo que este es el más simple y acepta la forma de escribir números en Europa y EE. UU., Por ejemplo, EE. UU. 10,555.12 Europeo 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ían. Esto puede ser útil.
fuente
Si desea extraer solo números de una cadena, el patrón "\ d +" debería ayudar.
fuente
Regex regex = nueva Regex ("^ [0-9] {1,4} = [0-9] {1,4] $")
fuente