Pola yang Anda inginkan adalah sesuatu seperti ( lihat di rubular.com ):
^[a-zA-Z0-9_.-]*$
Penjelasan:
^
adalah awal dari jangkar baris
$
adalah akhir dari jangkar baris
[...]
adalah definisi kelas karakter
*
adalah pengulangan "nol-atau-lebih"
Perhatikan bahwa tanda hubung literal -
adalah karakter terakhir dalam definisi kelas karakter, jika tidak maka memiliki arti yang berbeda (yaitu rentang). Itu .
juga memiliki arti yang berbeda di luar definisi kelas karakter, tetapi di dalamnya, itu hanya literal.
Referensi
Di PHP
Berikut cuplikan untuk menunjukkan bagaimana Anda dapat menggunakan pola ini:
<?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";
};
}
?>
Cetakan di atas ( seperti yang terlihat di 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!!!
Perhatikan bahwa polanya sedikit berbeda, gunakan \w
sebagai gantinya. Ini adalah kelas karakter untuk "karakter kata".
Referensi API
Catatan tentang spesifikasi
Ini tampaknya mengikuti spesifikasi Anda, tetapi perhatikan bahwa ini akan cocok dengan hal-hal seperti .....
, dll, yang mungkin atau mungkin tidak sesuai dengan keinginan Anda. Jika Anda bisa lebih spesifik pola apa yang ingin Anda cocokkan, ekspresi reguler akan sedikit lebih rumit.
Regex di atas juga cocok dengan string kosong. Jika Anda membutuhkan setidaknya satu karakter, gunakan +
(satu-atau-lebih) daripada *
(nol-atau-lebih) untuk pengulangan.
Bagaimanapun, Anda dapat lebih memperjelas spesifikasi Anda (selalu membantu saat mengajukan pertanyaan regex), tetapi mudah-mudahan Anda juga dapat mempelajari cara menulis pola sendiri dengan informasi di atas.