Tengo problemas para verificar en PHP si un valor es cualquiera de las siguientes combinaciones
- letras (mayúsculas o minúsculas)
- números (0-9)
- guion bajo (_)
- guión (-)
- punto (.)
- ¡No hay espacios! u otros personajes
Algunos ejemplos:
- Aceptar: "screen123.css"
- Aceptar: "screen-new-file.css"
- Aceptar: "screen_new.js"
- NO ACEPTABLE: "filtrar nuevo archivo.css"
Supongo que necesito una expresión regular para esto, ya que necesito lanzar un error cuando una cadena dada tiene otros caracteres además de los mencionados anteriormente.
Respuestas:
El patrón que desea es algo como ( véalo en rubular.com ):
Explicación:
^
es el comienzo del ancla de línea$
es el ancla del final de la línea[...]
es una definición de clase de carácter*
es una repetición "cero o más"Tenga en cuenta que el guión literal
-
es el último carácter en la definición de la clase de caracteres; de lo contrario, tiene un significado diferente (es decir, rango). El.
también tiene un significado diferentes definiciones de clases de carácter exterior, pero por dentro, es sólo un literal.
Referencias
En PHP
Aquí hay un fragmento para mostrar cómo puede usar este patrón:
Las impresiones anteriores ( como se ve en ideone.com ):
Tenga en cuenta que el patrón es ligeramente diferente, usando en su
\w
lugar. Esta es la clase de carácter para "carácter de palabra".Referencias API
preg_match
Nota sobre la especificación
Esto parece seguir su especificación, pero tenga en cuenta que esto coincidirá con cosas como
.....
, etc., que pueden o no ser lo que desea. Si puede ser más específico con el patrón que desea hacer coincidir, la expresión regular será un poco más complicada.La expresión regular anterior también coincide con la cadena vacía. Si necesita al menos un carácter, utilice
+
(uno o más) en lugar de*
(cero o más) para la repetición.En cualquier caso, puede aclarar aún más su especificación (siempre ayuda cuando hace una pregunta de expresiones regulares), pero con suerte también puede aprender a escribir el patrón usted mismo dada la información anterior.
fuente
^/([a-zA-Z0-9._-]*\.html)$
/[a-zA-Z0-9]+(\.[a-zA-Z0-9]+){2,}[a-zA-Z0-9^]$/
false
literales de cadena sin formato vacíos. Patio de recreo . Utilice la solución de @ nonopolarity a continuación .puedes usar
el
+
es para asegurarse de que tiene al menos 1 carácter. Necesita^
y$
para indicar el comienzo y el final; de lo contrario, si la cadena tiene una coincidencia en el medio,@@@@xyz%%%%
entonces todavía es una coincidencia.fuente
-
primero en el conjunto, para evitar definir un rango. Y\w
cubre alfanuméricos y subrayado. Entonces lo necesitas[\w.-]+
.Para cubrir realmente su patrón, es decir, nombres de archivo válidos de acuerdo con sus reglas, creo que necesita un poco más. Tenga en cuenta que esto no coincide con los nombres de archivos legales desde la perspectiva del sistema . Eso dependería del sistema y sería más liberal en lo que acepta. Esto está destinado a coincidir con sus patrones aceptables.
Explicación:
^
Coincide con el comienzo de una cadena. Esto (más la coincidencia final) obliga a la cadena a ajustarse a la expresión exacta, no simplemente a contener una subcadena que coincida con la expresión.([a-zA-Z0-9]+[_-])*
Cero o más ocurrencias de una o más letras o números seguidos de un guión bajo o guión. Esto hace que todos los nombres que contienen un guión o un guión bajo tengan letras o números entre ellos.[a-zA-Z0-9]+
Una o más letras o números. Esto cubre todos los nombres que no contienen un guión bajo ni un guión.\.
Un punto literal (punto). Obliga a que el nombre del archivo tenga una extensión y, por exclusión del resto del patrón, solo permite que se use el punto entre el nombre y la extensión. Si desea más de una extensión que pueda manejarse también usando la misma técnica que para el guión / guión bajo, solo al final.[a-zA-Z0-9]+
Una o más letras o números. La extensión debe tener al menos un carácter y solo debe contener letras y números. Esto es típico, pero si quisiera permitir guiones bajos, eso también podría abordarse. También puede proporcionar un rango de longitud en{2,3}
lugar de uno o más+
comparadores, si fuera más apropiado.$
Coincide con el final de la cuerda. Vea el personaje inicial.fuente
Este es el patrón que estás buscando
Lo que esto significa:
^
Inicio de cadena[...]
Coincidir con los personajes del interior\w
Cualquier carácter de palabra0-9
a-z
A-Z
-_.
Partido-
y_
y.
*
Cero o más de patrón o ilimitado$
Fin de cadenaSi desea limitar la cantidad de caracteres:
{0,5}
Significa0-5
personajesfuente
\w
incluye_
Algo como esto debería funcionar
Esto hará eco de "no válido"
fuente
[A-Za-z0-9_.-]*
Esto también coincidirá con las cadenas vacías, si no desea que cambie la última
*
por una+
fuente