Quiero una expresión regular que permite sólo esto:Una expresión regular rápida necesaria
letter a-z
case insensitive
allows underscores
allows any nrs
¿Cómo debe ser escrito?
Gracias
Quiero una expresión regular que permite sólo esto:Una expresión regular rápida necesaria
letter a-z
case insensitive
allows underscores
allows any nrs
¿Cómo debe ser escrito?
Gracias
que sería
\w
si no me equivoco (Como resultado, depende: En PHP las meaning of \w
cambios con el locale que está vigente en la actualidad). Puede utilizar a more explicit form para clavar abajo:
[A-Za-z0-9_]
lo uso en contexto, agrega de inicio de la cadena y al final de la cadena anchors y una quantifier que define el número de caracteres que va a permitir:
^[A-Za-z0-9_]+$
if(preg_match('/^[0-9a-z_]+$/i', $string)) {
//if it matches
}
else {
//if it doesn't match
}
[0-9a-z_]
es una clase de caracteres que define los dígitos del 0 al 9, las letras a a la Z y el subrayado. El i
al final hace que el partido no distinga entre mayúsculas y minúsculas. ^
y $
son anclajes que coinciden con el principio y el final de la cadena, respectivamente. El +
significa 1 o más caracteres.
incorrecto Esto arrojará un falso positivo si la entrada contiene un carácter válido, incluso si también contiene caracteres no válidos. – Matt
Buen punto: estoy editando mi respuesta. –
Esto no funcionaría. "a b c d" pasaría, ya que solo estás buscando a uno de los personajes de la cadena para que coincida. Modifique el patrón a '/^[0-9a-z _] $/i' y funcionará. – ceejayoz
PHP:
if (preg_match('/[^a-z0-9_]/i', $input)) {
// invalid input
} else {
// valid input
}
Así [a-z0-9_]
es un conjunto de caracteres para los caracteres válidos. Agregar un ^
al frente ([^a-z0-9_]
) lo niega. La lógica es que si un carácter coincide con algo que NO está en el juego de caracteres válido, la entrada se considera inválida.
El /i
en el extremo hace que el casamiento sea insensible.
+1 - Algunas veces, la expresión regular más fácil de probar/leer es la negación. En lugar de permitir solo ciertos caracteres, solo prueba la existencia de un personaje inválido. – gnarf
Pero cuando el patrón es el mismo (negación de barras), solo es cuestión de invertir los bloques if/else, o poner un '!' Antes de 'preg_match'. Negar hace que sea más fácil cuando cambias el problema, no cuando escribes el mismo patrón exacto de una manera ligeramente diferente. –
¿Cómo debería escribirse? (Dividirla en varias líneas)
/ # Start RegExp Pattern
^ # Match beginning of string only
[a-z0-9_]* # Match characters in the set [ a-z, 0-9 and _ ] * = Zero or more times
$ # Match end of string
/i # End Pattern - Case Insensitive Matching
Dándole
if (preg_match('/^[a-z0-9_]*$/i', $input)) {
// input is valid
}
También es posible usar un +
en lugar de *
si desea forzar al menos un carácter también.
¿No es sensible a las mayúsculas y minúsculas? Su código que es (¡no es la explicación!) –
@Vivin Paliath - ¡Sí! Gracias por el suave empujoncito. – gnarf
¡Está bien, no hay problema! :) –
Nada ... No sé mucho sobre regexp –
¿Qué idioma? ¿Todos los que están en tus etiquetas? –
php, lo siento chicos ... –