Le modèle que vous voulez 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 une plage). Le a .
également une signification différente en dehors des définitions de classe de caractères, mais à l'intérieur, c'est juste un littéral.
Références
En PHP
Voici un extrait de code pour montrer 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 ( comme 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, en utilisant à la \w
place. Il s'agit de la classe de caractères pour "caractère de mot".
Références API
Remarque sur les spécifications
Cela semble suivre votre spécification, mais notez que cela correspondra à des choses comme .....
, etc., qui peuvent ou non être ce que vous désirez. Si vous pouvez être plus précis sur le modèle que vous souhaitez associer, l'expression régulière sera légèrement plus compliquée.
L'expression régulière ci-dessus correspond également à la chaîne vide. Si vous avez besoin d'au moins un caractère, utilisez +
(un ou plusieurs) au lieu de *
(zéro ou plus) pour la répétition.
Dans tous les cas, vous pouvez clarifier davantage votre spécification (cela aide toujours lorsque vous posez une question regex), mais j'espère que vous pourrez également apprendre à écrire le modèle vous-même compte tenu des informations ci-dessus.