Pregunta

Tengo un campo en un formulario que toma los siguientes valores: -1, 2-10, 99

Tengo una regla de negocio que se ocupa de las respuestas 2-10.

Estoy intentando escribir una expresión regular que coincida con 2-10 pero no 99, y estoy teniendo problemas.

La expresión original:

^2|3|4|5|6|7|8|9|10$

falla porque 99 se corresponde (técnicamente, dos veces). Además, los limites de línea son algo que nunca he estado cómodo. Me oberve comportamiento diferente de ellos en el expreso que yo en otros lugares (por ejemplo, .net). En este caso particular, la expresión regular está siendo dirigido en javascript . De todos modos, expresso parece hacer caso de ellos (y si pongo los valores entre paréntesis:

^[2|3|4|5|6|7|8|9|10]$

^[2-9]$

o bien "todas Explicado" o como un rango, expresso nunca se regresa ninguna coincidencia si puedo especificar los caracteres línea de apertura / línea de cierre de cadena / cuerda (y sí, yo estaba tratando de coincidir con el 10 por separado en el segundo caso) .

Lo sé, lo sé. Si utiliza una expresión regular para resolver un problema, entonces tienes dos problemas (y, presumiblemente, van a empezar a invitar amigos, estilo 1 cosa y cosa 2). No hago Tienes para utilizar uno aquí; Puedo cambiar a una declaración de caso. Pero parece que yo debería ser capaz de utilizar una expresión regular aquí, y parece una cosa razonable para hacerlo. Todavía estoy bastante verde cuando se trata de la expresión regular;

¿Fue útil?

Solución

Es necesario paréntesis para eso. Me gustaría utilizar más rangos de mantener las cosas legibles:

^([2-9]|10)$

Otros consejos

Esto es claramente un caso donde no se debe utilizar RegExp pero la evaluación numérica:

var num = parseInt(aNumber, 10);
if (num >= 2 && num <= 10) {
    alert("Match found!");
}

Use paréntesis alrededor de las alternancias, ya concatenación tiene mayor precedencia que alternancia:

^(2|3|4|5|6|7|8|9|10)$

A javascript función completa para que coincida con o bien 2 aunque 9, o 10

<script type="text/javascript">
    function validateValue( theValue )
    {
        if( theValue.match( /^([2-9]{1}|10)$/ ) )
        {
            window.alert( 'Valid' );
        }
        else
        {
            window.alert( 'invalid' );
        }
        return false;
    }
</script>

La expresión regular se expande fácilmente para incorporar todas sus reglas:

/^(-1|[2-9]|10|99)$/ // will match -1, 2-10, 99

Edit: se me olvidó mencionar que tendrá que sustituir su propia lógica situacional verdadero / falso. Edit2:. añade entre paréntesis que falta hasta el 2 de expresiones regulares

La razón falla su expresión original es porque estás a juego ^ 2, 3, 4, 5, 6, 7, 8, 9, 10 $.

Probar expresión regular: ^ (2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10) $

Esta utilidad en línea es muy bueno en la generación de re para los rangos numéricos: http://utilitymill.com/utility/ Regex_For_Range. Para el rango de 2-10 inclusiva, que da a esta expresión: \b0*([2-9]|10)\b. Si desea omitir líder de 0, sacar el "0 *" parte.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top