expresión regular para letras, números y – _

Tengo problemas para verificar PHP si un valor es alguna de las siguientes combinaciones

  • letras (mayúsculas o minúsculas)
  • números (0-9)
  • guion bajo (_)
  • dash (-)
  • punto (.)
  • ¡No hay espacios! u otros personajes

Algunos ejemplos:

  • OK: “screen123.css”
  • OK: “screen-new-file.css”
  • OK: “screen_new.js”
  • NO OK: “screen new file.css”

Supongo que necesito una expresión regular para esto, ya que necesito arrojar un error cuando una cadena de dar tiene otros caracteres en ella que los mencionados anteriormente.

puedes usar

 ^[\w\d_.-]+$ 

el + es para asegurarse de que tiene al menos 1 carácter. Se necesitan ^ y $ para indicar el comienzo y el final; de lo contrario, si la cadena tiene una coincidencia en el medio, como @@@@xyz%%%% entonces todavía coincide.

Para cubrir tu patrón, es decir, nombres de archivo válidos según tus reglas, creo que necesitas un poco más. Tenga en cuenta que esto no coincide con los nombres de archivos legales desde la perspectiva del sistema . Eso sería dependiente del sistema y más liberal en lo que acepta. Esto tiene la intención de coincidir con sus patrones aceptables.

 ^([a-zA-Z0-9]+[_-])*[a-zA-Z0-9]+\.[a-zA-Z0-9]+$ 

Explicación:

  • ^ coincidir el comienzo de una cadena. Esto (más la coincidencia final) obliga a la cadena a ajustarse a la expresión exacta, no solo a contener una subcadena que coincida con la expresión.
  • ([a-zA-Z0-9]+[_-])* Cero o más apariciones de una o más letras o números seguidas de un guión bajo o guión. Esto hace que todos los nombres que contengan un guion o guion 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 contengan guiones bajos o guiones.
  • \. Un período literal (punto). Obliga al nombre del archivo a tener una extensión y, por exclusión del rest del patrón, solo permite que se use el período entre el nombre y la extensión. Si desea más de una extensión que podría manejarse también utilizando la misma técnica que para el guión / guión bajo, 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 debe contener solo letras y números. Esto es típico, pero si desea permitir subrayados, eso también podría abordarse. También podría proporcionar un rango de longitud {2,3} lugar del uno o más + matcher, si fuera más apropiado.
  • $ Coincide con el final de la cadena. Ver el personaje inicial.

Algo como esto debería funcionar

 $code = "screen new file.css"; if (!preg_match("/^[-_a-zA-Z0-9.]+$/", $code)) { echo "not valid"; } 

Esto hará eco “no válido”

Este es el patrón que está buscando

 /^[\w-_.]*$/ 

Lo que esto significa:

  • ^ Inicio de cadena
  • [...] Unir personajes dentro
  • \w Cualquier carácter de palabra por lo que 0-9 az AZ
  • -_. Coincide con ‘-‘ y ‘_’ y ‘.’
  • * Cero o más de patrón o ilimitado
  • $ Fin de cadena

Si quiere limitar la cantidad de caracteres:

 /^[\w-_.]{0,5}$/ 

{0,5} Significa 0-5 caracteres

[A-Za-z0-9_.-]*

Esto también coincidirá con cadenas vacías, si no desea que intercambie el último * por un +