2010-08-10 20 views
16

todo lo que quiero hacer es que coincida con un número entre 2-16, que abarca dígitos 1 a 2 dígitosExpresión regular - Rango (2-16)?

acuerdo con http://www.regular-expressions.info/numericranges.html, tienen ejemplos para 1 o 2 rangos de dígitos, pero no es algo que se extiende por both..if que tiene sentido.

The regex [0-9] matches single-digit numbers 0 to 9. [1-9][0-9] matches double-digit numbers 10 to 99. 

Algo así como "^ [2-9] [1-6] $" coincide con 21 o incluso 96 lol. Cualquier ayuda sería apreciada.

Respuesta

32
^([2-9]|1[0-6])$ 

coincidirá con un solo dígito entre 2 y 9 inclusive, o un 1 seguido de un dígito entre 0 y 6, ambos inclusive.

+1

Simple y al grano. +1. – Joey

+4

+1 y borrando mi respuesta porque me ganaste por 8 segundos. –

+0

¡Gracias! ** Nota rápida **, si no necesita hacer coincidir desde el principio hasta el final de la cadena, o si no necesita capturar el grupo: '(?: [2-9] | 1 [0-6]) ' – skplunkerin

6

Con delimitadores (por costumbre): /^([2-9]|1[0-6])$/

la expresión regular en sí es simplemente: ^([2-9]|1[0-6])$

+0

Las barras son específicas de PHP y probablemente deberían eliminarse cuando alguien hable de una expresión regular general. –

+4

@Billy ONeal: Eso no es para nada específico de PHP. Se puede usar en cualquier idioma que le permita elegir su delimitador. – eldarerathis

+1

Perl los tenía antes de PHP. En cualquier caso, no son parte de la expresión, de hecho. Si su lenguaje requiere que use algo así, entonces la persona que lo solicitó puede agregarlos trivialmente. – Joey

1
^([2-9]|1[0-6])$ 

(Editar:. cotizaciones eliminadas de aclaración)

+0

Las citas son específicas de cómo se insertaría la expresión regular en un entorno de programación, pero probablemente deberían eliminarse al hablar de expresiones regulares en el resumen. –

+0

Gracias; corregido – alecov

+2

Su expresión regular "^ [2-9] | 1 [0-6] $" es incorrecta, porque el "|" separa el "^" del primer patrón y el "$" para el segundo. Aquí necesita paréntesis, por ejemplo: "^ ([2-9] | 1 [0-6]) $" – vog

-1

(^ [2 -9] $ |^1 [0-6] $)

Especificando inicio y finalización para cada conjunto de números que está buscando su Regex tampoco devolverá 36, 46, ... y así sucesivamente. Probé la solución anterior y encontré que esto funciona mejor para mantenerse dentro del rango de 2-16.