10/10/2018, 11:03

Lọc kí tự bằng preg_replace

Tình hình là mình viết 1 code tạo folder bằng php, và mình ko muốn tên folder dc tạo bằng những kí tự đặc biệt hay utf, nên mình viết lệnh

PHP Code:
if ($dirName !== false && preg_match('~(***91;^A-Z0-9***93;+)~i'$dirName$matches) === 0
preg_match trên giải quyết tốt vấn đề chỉ cho phép đặt tên từ a-z0-9, nhưng mình muốn có thể sử dụng thêm kí tự '/' và '-' khi nhập tên file, nó sẽ tạo luôn sub folder sau dấu '/', vậy phải làm sao để cho phép kí tự '/' và '-'dc sử dụng trong lệnh preg_match trên @@.

Xin chỉ giúp !!
vzic viết 13:05 ngày 10/10/2018
Theo mình thì bạn nên explode cái chuỗi đó ra thành càng chuỗi nhỏ, rồi lọc ký tự cũng đc
explode('/',$str)
trandaihung87 viết 13:19 ngày 10/10/2018
Chuỗi nhập vào đâu nhất thiết phải có '/' đâu thì sao mà explode dc :|
Delete All™ viết 13:18 ngày 10/10/2018
vài hôm nay mình cũng đang làm việc với cái hàm này nhưng vẫn khá lu mở.

Bạn thử rexg thế này nhé : /([a-zA-Z0-9-\/]+)/
megaownage viết 13:13 ngày 10/10/2018
Theo đúng tiêu chuẩn regex thì dấu - phải đặt ngay sau [ mới có nghĩa là -

Nếu muốn đặt sau ký tự khác thì phải 'thoát nghĩa rộng' (escape) nó bằng dấu \
Mr.vanbach viết 13:04 ngày 10/10/2018
Em mún có một ví dụ rõ ràng ko ?
em chưa hiểu lắm ?
mong a giúp đỡ
Alex0511 viết 13:05 ngày 10/10/2018
Bạn đọc thêm ở đây: http://www.webcheatsheet.com/php/reg...xpressions.php
fotech_nd viết 13:16 ngày 10/10/2018
Được gửi bởi trandaihung87
Tình hình là mình viết 1 code tạo folder bằng php, và mình ko muốn tên folder dc tạo bằng những kí tự đặc biệt hay utf, nên mình viết lệnh

PHP Code:
if ($dirName !== false && preg_match('~(***91;^A-Z0-9***93;+)~i'$dirName$matches) === 0
preg_match trên giải quyết tốt vấn đề chỉ cho phép đặt tên từ a-z0-9, nhưng mình muốn có thể sử dụng thêm kí tự '/' và '-' khi nhập tên file, nó sẽ tạo luôn sub folder sau dấu '/', vậy phải làm sao để cho phép kí tự '/' và '-'dc sử dụng trong lệnh preg_match trên @@.

Xin chỉ giúp !!
Ví dụ cho bạn nhé:
Code:
$dirName = "Root/Users/Guest/Sample-folder";
$dirNamePattern = "[0-9a-z\-]+";
if (preg_match("/^{$dirNamePattern}(\/{$dirNamePattern})*$/i", $dirName, $matches))
{
    echo "Dir valid";
    // Sau đó split bởi '/' và dùng Loop để create folder
} else {
    echo "Dir invalid";
}
Bài liên quan
0