Das gewünschte Muster ist ungefähr so ( siehe auf rubular.com ):
^[a-zA-Z0-9_.-]*$
Erläuterung:
^
ist der Anfang des Linienankers
$
ist das Ende des Linienankers
[...]
ist eine Zeichenklassendefinition
*
ist eine Wiederholung von "null oder mehr"
Beachten Sie, dass der Literalstrich -
das letzte Zeichen in der Zeichenklassendefinition ist, andernfalls hat er eine andere Bedeutung (dh einen anderen Bereich). Das hat .
auch außerhalb der Zeichenklassendefinitionen eine andere Bedeutung, aber innerhalb ist es nur ein Literal.
Verweise
In PHP
Hier ist ein Ausschnitt, der zeigt, wie Sie dieses Muster verwenden können:
<?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";
};
}
?>
Die obigen Drucke ( wie auf ideone.com zu sehen ):
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!!!
Beachten Sie, dass das Muster etwas anders ist, wenn Sie \w
stattdessen verwenden. Dies ist die Zeichenklasse für "Wortzeichen".
API-Referenzen
Hinweis zur Spezifikation
Dies scheint Ihrer Spezifikation zu folgen, aber beachten Sie, dass dies mit Dingen wie .....
usw. übereinstimmt , die möglicherweise Ihren Wünschen entsprechen oder nicht. Wenn Sie genauer angeben können, mit welchem Muster Sie übereinstimmen möchten, ist der reguläre Ausdruck etwas komplizierter.
Der obige reguläre Ausdruck stimmt auch mit der leeren Zeichenfolge überein. Wenn Sie mindestens ein Zeichen benötigen, verwenden Sie +
(eins oder mehr) anstelle von *
(null oder mehr) für die Wiederholung.
In jedem Fall können Sie Ihre Spezifikation weiter präzisieren (hilft immer beim Stellen von Regex-Fragen), aber hoffentlich können Sie auch lernen, wie Sie das Muster anhand der obigen Informationen selbst schreiben.