Le modèle que vous souhaitez obtenir est quelque chose comme ( voir sur rubular.com ) :
^[a-zA-Z0-9_.-]*$
Explication :
-
^
est le début de l'ancre de ligne
-
$
est la fin de l'ancre de ligne
-
[...]
est une définition de classe de caractères
-
*
est une répétition "zéro ou plus".
Notez que le tiret littéral -
est le dernier caractère de la définition de la classe de caractères, sinon il a une signification différente (c'est-à-dire un intervalle). Le caractère .
a également une signification différente en dehors des définitions des classes de caractères, mais à l'intérieur, il s'agit simplement d'une valeur littérale de .
Références
En PHP
Voici un extrait qui montre comment vous pouvez utiliser ce modèle :
<?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";
};
}
?>
Les impressions ci-dessus ( tel que vu sur 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!!!
Notez que le modèle est légèrement différent, utilisant \w
au lieu de cela. Il s'agit de la classe de caractères pour le "caractère de mot".
Références API
Note sur les spécifications
Cela semble correspondre à votre spécification, mais notez que cela correspondra à des choses comme .....
etc., ce qui peut correspondre ou non à ce que vous souhaitez. Si vous pouvez être plus précis quant au motif que vous souhaitez faire correspondre, l'expression rationnelle sera légèrement plus compliquée.
L'expression rationnelle ci-dessus correspond également à la chaîne vide. Si vous avez besoin d'au moins un caractère, utilisez alors +
(un ou plus) au lieu de *
(zéro ou plus) pour la répétition.
Dans tous les cas, vous pouvez clarifier davantage votre spécification (ce qui est toujours utile lorsque l'on pose une question sur les expressions rationnelles), mais j'espère que vous pourrez également apprendre à écrire le motif vous-même à partir des informations ci-dessus.