2011-07-15 19 views
5

Estoy tratando de validar un campo de entrada con expresiones regulares con este patrón [A-Za-z]{,10} Quiero que solo encuentre una coincidencia si se enviaron 10 o menos caracteres en el campo de entrada, el problema que tengo es que coincidirá con todas las palabras que tengan menos de 10 caracteres.Uso de expresiones regulares para filtrar cadenas por longitud

¿Hay alguna manera de decir si hay más de 10 caracteres en el campo de entrada que vuelven como falsos, o simplemente es mejor hacer un strlen con php?

+0

Tenga en cuenta que: '{, 10}' es un cuantificador no válido. Aunque: '{10,}' significa que "_" coincide 10 o más veces "_, la expresión:' {, 10} 'NO significa _" partido de cero a diez veces "_. En realidad significa: _" coincidencia " un corchete izquierdo, una coma, el dígito 1, el dígito 0 y un corchete derecho "_. Para obtener el comportamiento que desea, debe especificar el primer dígito como:' {0,10} '. – ridgerunner

Respuesta

1

Aquí se comete un error de sintaxis importante con el OP y todas las respuestas actuales de expresiones regulares: Al utilizar el cuantificador de llaves con PHP (PCRE), debe especificar el primer número. (es decir, la expresión: {,10} NO es un cuantificador válido!) Aunque la coma y el segundo número son opcionales, se requiere el primer número en un cuantificador de llavero. Por lo tanto, la expresión debe especificarse así:

if (preg_match('/^[A-Za-z]{0,10}$/', $text)) 
    // Valid input 
else 
    // Invalid input 
3

Si necesita validar que es solo alfabético, no use strlen(). En su lugar, poner límites (^$) en su expresión regular:

/^[A-Za-z]{,10}$/ 
0

Si sólo coinciden ^[A-Za-z]{,10}$ se comprobará que toda la cadena es de 10 o menos.

0

^[A-Za-z]{,10}$

[email protected]#$^&$a36#&$^ pasar su expresión regular debido a es subcadena de ella y a pase [A-Za-z]{,10}

0

Si sólo está interesado en la longitud de la cadena, la expresión regular es de mano dura y se debe utilizar strlen en lugar.

Cuestiones relacionadas