2012-01-06 27 views
16

Tengo lo siguiente en mi código C# - lo que me gusta hacer es verificar si la expresión tiene números o un guion, pero nada más. Si escribo la letra K junto con un guión o número, todavía la acepta. ¿Cómo digo sólo tengo el expreso ser números o un guión:C# Regex para números y guiones solamente

 Match match = Regex.Match(input, @"[0-9-]"); 

Tenga en cuenta que la entrada es el texto que estoy pasando por evalution.

+1

Su expresión significa que debe haber un número o un guión en algún lugar dentro de la cadena. No es que pueda * solo * contener estos personajes y nada más. –

+1

¿por qué el -1? Está haciendo una pregunta acerca de una expresión regular que no funciona, proporciona el código relevante y lo que espera lograr. – mynameiscoffey

Respuesta

34
Match match = Regex.Match(input, @"^[0-9-]*$"); 

El ^ significa que el partido debe comenzar por el principio de la entrada, el $ que debe terminar al final de la entrada.

El * significa que (solo) 0 o más números o guiones deberían estar allí (use + en lugar de 1 o más).

+0

no debería escaparse el tablero de la siguiente manera: 'Match match = Regex.Match (input, @"^[0-9 \ -] $ ");'? –

+7

No, un guion al principio o al final (entre '[]') es un guion literal, no un caracter de rango. –

1

Tienes que escapar del segundo guión.

Match match = Regex.Match(input, @"[0-9\-]"); 

Admitiré que no lo probé, pero debería funcionar.

Esto solo funcionará con un personaje. Si desea que se lleve más de un carácter, como "123-5", a continuación, cambiar su expresión regular para ..

Match match = Regex.Match(input, @"[0-9\-]+"); 
+1

Sinus el segundo - no puede ser un rango, no es necesario escapar de él –

+0

@rich - ¡No sabía que era cierto, gracias! –

9

Su expresión coincide con que existe ninguna dígitos o un guión dentro de la cadena, intente lo siguiente :

Regex.Match(input, @"^[\d-]+$"); 

^ inicio de la cadena

[\d-]+ uno o más dígitos o guiones

$ Fin de la cadena

+0

Gracias, funciona como esperaba. Cuando escribo un valor, no acepta, digamos 9999K.Lo que dice la expresión no acepta ningún valor alfa? –

+0

como se describió anteriormente, la expresión regular dice que solo pueden existir uno o más dígitos o guiones entre el comienzo y el final de la cadena. La razón por la que las cartas permitieron que las cartas se transmitieran fue porque solo estabas verificando que existía un dígito o un guión dentro de la cadena. Los '^' y '$' se aseguran de que estoy revisando toda la cadena, no ninguna parte de ella que coincida. – mynameiscoffey

2

Cualquiera de los siguientes Regex funcionará bien.

[0-9\-]+ (+ one or more occurance) 

[\d\-]+ (as \d represents numbers) 

si quieres - debe ser entre los dígitos

[\d]+\-*[\d]+ will match any of following 
90909900 
9090-9009 
900--900 

si desea utilizar sólo una - o no - entre los dígitos, continuación

[\d]+\-?[\d]+ will match any of following 
90909900 pass 
9090-9009 pass 
900--900 fail 
+1

[\ d] + \ - * [\ d] + es exactamente lo que estaba buscando. –

0

Si eso es una matriz de cadenas , considere terminarlo con LINQ?

if (arrInput.Any(s => (!Regex.IsMatch(s, @"^[\d-]+$")))){ //OK } 
Cuestiones relacionadas