El patrón que desea es algo como ( véalo en rubular.com ):
^[a-zA-Z0-9_.-]*$
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:
<?php
$arr = array(
'screen123.css',
'screen-new-file.css',
'screen_new.js',
'screen new file.css'
);
foreach ($arr as $s) {
if (preg_match('/^[\w.-]*$/', $s)) {
print "$s is a match\n";
} else {
print "$s is NO match!!!\n";
};
}
?>
Las impresiones anteriores ( como se ve en ideone.com ):
screen123.css is a match
screen-new-file.css is a match
screen_new.js is a match
screen new file.css is NO match!!!
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
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.