Mô hình bạn muốn giống như ( xem trên rubular.com ):
^[a-zA-Z0-9_.-]*$
Giải trình:
^
là đầu của neo dòng
$
là phần cuối của ký tự neo
[...]
là một định nghĩa lớp ký tự
*
là sự lặp lại "không hoặc nhiều hơn"
Lưu ý rằng dấu gạch ngang chữ -
là ký tự cuối cùng trong định nghĩa lớp ký tự, nếu không thì nó có nghĩa khác (tức là phạm vi). Bên .
ngoài định nghĩa lớp ký tự cũng có một ý nghĩa khác, nhưng bên trong, nó chỉ là một nghĩa đen.
Người giới thiệu
Trong PHP
Dưới đây là một đoạn mã để chỉ ra cách bạn có thể sử dụng mẫu này:
<?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";
};
}
?>
Các bản in trên ( như đã thấy trê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!!!
Lưu ý rằng mô hình hơi khác, sử dụng \w
thay thế. Đây là lớp ký tự cho "ký tự từ".
Tham chiếu API
Lưu ý về đặc điểm kỹ thuật
Điều này dường như tuân theo đặc điểm kỹ thuật của bạn, nhưng lưu ý rằng điều này sẽ phù hợp với những thứ như .....
, v.v., có thể có hoặc có thể không phải những gì bạn mong muốn. Nếu bạn có thể nói rõ hơn mẫu bạn muốn khớp, thì regex sẽ phức tạp hơn một chút.
Regex ở trên cũng khớp với chuỗi trống. Nếu bạn cần ít nhất một ký tự, thì hãy sử dụng +
(một hoặc nhiều) thay vì *
(0 hoặc nhiều) để lặp lại.
Trong mọi trường hợp, bạn có thể làm rõ thêm thông số kỹ thuật của mình (luôn hữu ích khi đặt câu hỏi regex), nhưng hy vọng rằng bạn cũng có thể học cách tự viết mẫu với thông tin trên.