2012-08-23 22 views
7

Estoy tratando de escribir una expresión regular para permitir números y solo un hypen en el medio (no puede ser al principio o al final) decir patrón: 02-04, 02 son aceptable, pero patrón: -- o - o -02 o 04- o 02-04-06 son inaceptablesRegex para permitir números y un solo guión en el medio

probé algo como esto, pero esto permitiría que - al principio y también permiten múltiples -

'/^[0-9 \-]+$/' 

No soy tan bueno con expresiones regulares, así que una pequeña explicación sería de gran ayuda.

EDIT: Lo sentimos molestarte de nuevo con esto, pero necesito los números a ser de sólo 2 dígitos (123-346) se debe considerar válida.

Respuesta

12

Probar esta:

/^\d{1,2}(-\d{1,2})?$/ 

uno o dos dígitos, seguido por, opcionalmente, (un guión seguido de uno o dos dígitos)

+1

La misma respuesta que la mía, pero me ganaste. Así que agregué una explicación, votada y eliminé la mía. – slim

+0

Gracias por la explicación @slim Necesito que –

+0

Lamento molestarlo de nuevo con esto, pero necesito que los números que son de solo 2 dígitos (123-346) se consideren inválidos. –

5

Bastante fácil:

^\d+(-\d+)?$ 

al menos un (+) dígito (\d), seguido por un grupo opcional que contiene un guión-menos (-), seguido de al menos un dígito de nuevo.

+0

pero esto dejaría inválido '02', ya que su expresión requiere un guión –

+0

Esto no coincidirá con' 02' –

+0

Ah, lo siento; se pasó por alto la parte que decía que el guión-menos es opcional. Corregido ahora. Es cierto que ese requisito es un poco difícil de ver en la pregunta, ya que cada explicación verbal del patrón suena como que se requiere el guión negativo. – Joey

2

Para cadenas que contienen solamente que el patrón de la siguiente debe funcionar

^(\d{2}-)?\d{2}$ 

Un grupo de 2 dígitos seguido de un signo menos que termina con un grupo de 2 dígitos sin signo negativo.

Cuestiones relacionadas