Wzór, który chcesz, jest podobny ( zobacz go na rubular.com ):
^[a-zA-Z0-9_.-]*$
Wyjaśnienie:
^
jest początkiem kotwicy linii
$
jest końcem kotwicy linii
[...]
to definicja klasy znaków
*
to „zero lub więcej” powtórzeń
Zauważ, że dosłowny myślnik -
jest ostatnim znakiem w definicji klasy znaków, w przeciwnym razie ma inne znaczenie (np. Zakres). Ma .
również inne znaczenie poza definicjami klas znaków, ale w środku jest po prostu literałem.
Bibliografia
W PHP
Oto fragment pokazujący, jak możesz użyć tego wzorca:
<?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";
};
}
?>
Powyższe wydruki ( widoczne na 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!!!
Zauważ, że wzór jest nieco inny, używając \w
zamiast tego. To jest klasa znaków dla „znaku słowa”.
Dokumentacja API
Uwaga dotycząca specyfikacji
Wydaje się, że jest to zgodne z twoją specyfikacją, ale pamiętaj, że będzie pasować do rzeczy, takich jak .....
itp., Które mogą być takie, jak chcesz. Jeśli możesz bardziej precyzyjnie określić, jaki wzorzec chcesz dopasować, wyrażenie regularne będzie nieco bardziej skomplikowane.
Powyższe wyrażenie regularne również pasuje do pustego ciągu. Jeśli potrzebujesz co najmniej jednego znaku, użyj +
(jeden lub więcej) zamiast*
(zero lub więcej) do powtórzenia.
W każdym razie możesz dokładniej wyjaśnić swoją specyfikację (zawsze pomaga przy zadawaniu pytania regex), ale miejmy nadzieję, że możesz również nauczyć się pisać wzór samodzielnie, biorąc pod uwagę powyższe informacje.