Lo schema che desideri è qualcosa del tipo ( guardalo su rubular.com ):
^[a-zA-Z0-9_.-]*$
Spiegazione:
^ è l'inizio della linea di ancoraggio
$ è la fine della linea di ancoraggio
[...] è una definizione di classe di caratteri
* è la ripetizione "zero o più"
Si noti che il trattino letterale -è l'ultimo carattere nella definizione della classe di caratteri, altrimenti ha un significato diverso (cioè intervallo). L' .ha anche un diverso significato definizioni di classe al di fuori carattere, ma dentro, è solo un letterale.
Riferimenti
In PHP
Ecco uno snippet per mostrare come puoi usare questo pattern:
<?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";
};
}
?>
Le stampe sopra ( come visto su 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!!!
Nota che il modello è leggermente diverso, usando \winvece. Questa è la classe di caratteri per "carattere parola".
Riferimenti API
Nota sulle specifiche
Questo sembra seguire le tue specifiche, ma nota che corrisponderà a cose come ....., ecc., Che possono o meno essere ciò che desideri. Se puoi essere più specifico con quale modello vuoi abbinare, la regex sarà leggermente più complicata.
La regex sopra corrisponde anche alla stringa vuota. Se hai bisogno di almeno un carattere, usa +(uno o più) invece di *(zero o più) per la ripetizione.
In ogni caso, puoi chiarire ulteriormente le tue specifiche (aiuta sempre quando chiedi una domanda regex), ma si spera che tu possa anche imparare a scrivere il pattern da solo, date le informazioni di cui sopra.