Định Nghĩa.
Hàm fnmatch () kiểm tra xem một chuỗi hoặc tên tệp có khớp với mẫu ký tự đại diện đã cho không.
Cú pháp.
Cú pháp:
fnmatch ( string$pattern
, string$string
[, int$flags
= 0 ] ) : bool
Trong đó.
- $pattern Chỉ định mẫu ký tự đại diện
- $string Chỉ định chuỗi hoặc tệp để kiểm tra.
– Người dùng trung bình có thể được sử dụng để tạo các pattern hoặc ít nhất là ở dạng đơn giản nhất để ‘?’ và ‘*’ ký tự đại diện để sử dụng fnmatch () thay vì preg_match () cho đầu vào biểu thức tìm kiếm lối vào có thể thuận tiện hơn cho người dùng không lập trình. - $flags Có thể là một hoặc kết hợp các yếu tố sau:
– FNM_NOESCAPE – Vô hiệu hóa thoát dấu gạch chéo ngược
– FNM_PATHNAME – Dấu gạch chéo chỉ khớp với dấu gạch chéo trong mẫu đã cho
– FNM_PERIOD – Thời gian hàng đầu trong chuỗi phải được khớp chính xác theo thời gian trong mẫu
– FNM_CASEFOLD – Trận đấu không có kết quả. Một phần của phần mở rộng GNU
Giá trị trả về.
- TRUE on thành công, FALSE về thất bại.
Sự thay đổi.
- PHP 5.3: Hiện có sẵn trên nền tảng Windows
Ví dụ.
Ví dụ # 1 Kiểm tra tên màu theo mẫu ký tự đại diện
code:
<?php
if (fnmatch("*gr[ae]y", $color)) {
echo "some form of gray ...";
}
?>
Ghi chú.
- Cảnh báo Hiện tại, chức năng này không khả dụng trên các hệ thống không tuân thủ POSIX trừ Windows.
Hàm liên quan.
- glob() – Tìm tên đường dẫn khớp với mẫu
- preg_match() – Thực hiện khớp biểu thức chính quy
- sscanf() – Phân tích cú pháp đầu vào từ một chuỗi theo định dạng
- printf() – mở rộng một chuỗi được định dạng
- sprintf() – Trả về một chuỗi được định dạng
Thông tin thêm.
- Đây là một giải pháp dứt khoát, hỗ trợ các lớp ký tự phủ định và bốn cờ được ghi lại.
<?php
Điều này có lẽ cần thử nghiệm thêm, nhưng nó dường như hoạt động giống hệt với việc thực hiện fnmatch riêng.
if (!function_exists('fnmatch')) {
define('FNM_PATHNAME', 1);
define('FNM_NOESCAPE', 2);
define('FNM_PERIOD', 4);
define('FNM_CASEFOLD', 16);
function fnmatch($pattern, $string, $flags = 0) {
return pcre_fnmatch($pattern, $string, $flags);
}
}
function pcre_fnmatch($pattern, $string, $flags = 0) {
$modifiers = null;
$transforms = array(
'\*' => '.*',
'\?' => '.',
'\[\!' => '[^',
'\[' => '[',
'\]' => ']',
'\.' => '\.',
'\\' => '\\\\'
);
// Forward slash in string must be in pattern:
if ($flags & FNM_PATHNAME) {
$transforms['\*'] = '[^/]*';
}
// Back slash should not be escaped:
if ($flags & FNM_NOESCAPE) {
unset($transforms['\\']);
}
// Perform case insensitive match:
if ($flags & FNM_CASEFOLD) {
$modifiers .= 'i';
}
// Period at start must be the same as pattern:
if ($flags & FNM_PERIOD) {
if (strpos($string, '.') === 0 && strpos($pattern, '.') !== 0) return false;
}
$pattern = '#^'
. strtr(preg_quote($pattern, '#'), $transforms)
. '$#'
. $modifiers;
return (boolean)preg_match($pattern, $string);
}
?> - Có một vấn đề trong hàm pcre_fnmatch liên quan đến dấu gạch chéo ngược. Những thứ đó sẽ bị che bởi preq_quote và ADDITONALLY bởi strtr nếu FN_NOESCAPE không được đặt -> một cái gì đó như “* a (*” cuối cùng sẽ dẫn đến “# ^. * A \\ (. * $ #”. Lưu ý dấu gạch chéo kép thực tế KHÔNG che dấu “(” chính xác.
Vì preq_quote luôn khớp với dấu gạch chéo ngược, tôi không nghĩ rằng điều này sẽ hoạt động với việc sử dụng preg_quote.
Các bạn có thể xem chi tiết hơn trên php.net.
Hi vọng với bài viết này, bạn đã hiểu rõ ứng dụng của hàm filesize() trong PHP. Nếu bạn thấy bài viết hay và có ý nghĩa hãy like và chia sẻ bài viết này để mọi người cùng nhau học tập nhé. Cảm ơn các bạn đã ghé thăm codetutam.com