Шаблон, который вы хотите, выглядит примерно так ( смотрите на rubular.com ):
^[a-zA-Z0-9_.-]*$
Объяснение:
^
- этоначало якоря линии $
- это конец якоря строки [...]
- определение класса символов *
- это ноль илиmore "repetition
Обратите внимание, что буквенный тире -
является последним символом в определении класса символов, в противном случае он имеет другое значение (т. е. диапазон)..
также имеет другое значение вне определений классов символов, но внутри это просто литерал .
Ссылки
В PHP
Вот фрагмент кода, чтобы показать, как вы можете использовать это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";
};
}
?>
Приведенные выше отпечатки ( как видно на 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!!!
Обратите внимание, что рисунок немного отличается, используя \w
вместо.Это символьный класс для «слова».
Ссылки API
Примечаниепо спецификации
Кажется, что это соответствует вашей спецификации, но учтите, что это будет соответствовать вещам типа .....
и т. д., которые могут быть, а могут и не совпадать с вашими.Если вы можете более точно указать, с каким шаблоном вы хотите соответствовать, регулярное выражение будет немного сложнее.
Приведенное выше регулярное выражение также соответствует пустой строке.Если вам нужен хотя бы один символ, используйте для повторения +
(один или более) вместо *
(ноль или более).
В любом случае вы можете уточнитьспецификация (всегда помогает, задавая вопрос регулярных выражений), но, надеюсь, вы также можете узнать, как написать шаблон самостоятельно, учитывая приведенную выше информацию.