Hàm fnmatch() có chức năng gì trong PHP ?

25/07/2020 - lượt xem
Chia sẻ
 
Rate this post

Đị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
        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);
      }
    ?>
    Đ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.
  • 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

    Liên hệ với chúng tôi

    Để lại thông tin để nhận được các bài viết khác

    Rate this post

    Xem thêm nhiều bài tin mới nhất về Kiến thức

    Xem thêm