fnmatch în PHP

Verifică dacă un nume de fișier se potrivește cu un tipar ca „*.jpg”.

Sintaxă
fnmatch(string $pattern, string $filename, int $flags = 0): bool

Ce face fnmatch

fnmatch folosește aceleași metacaractere ca glob (*, ?, [abc]), dar verifică un singur text, fără să caute pe disc. Este util pentru a filtra liste de nume primite din altă parte.

Implicit face diferența între litere mari și mici. Cu FNM_CASEFOLD nu o mai face.

Parametri

Parametru Descriere
$pattern Tiparul, de exemplu "*.jpg".
$filename Numele verificat.
$flags Opțional. FNM_CASEFOLD, FNM_PATHNAME, FNM_NOESCAPE, FNM_PERIOD.

Ce returnează

true dacă numele se potrivește, altfel false.

Exemple

Exemplul 1: Filtrarea unei liste de nume

<?php
$fisiere = ["plaja.jpg", "CV.PDF", "factura-2026-10.pdf", "nota.txt"];

foreach ($fisiere as $nume) {
    if (fnmatch("*.pdf", $nume, FNM_CASEFOLD)) {
        echo $nume . "\n";
    }
}

Rezultat

CV.PDF
factura-2026-10.pdf

Exemplul 2: Litere mari și mici

<?php
var_dump(fnmatch("*.jpg", "poza.jpg"));
var_dump(fnmatch("*.jpg", "POZA.JPG"));
var_dump(fnmatch("factura-202?-*", "factura-2026-10.pdf"));

Rezultat

bool(true)
bool(false)
bool(true)

Greșeli frecvente

  • Folosești fnmatch pentru a valida o extensie și uiți de litere mari. "POZA.JPG" nu se potrivește cu "*.jpg" fără FNM_CASEFOLD.

Comenzi înrudite

  • glob: Găsește fișierele ale căror căi se potrivesc cu un tipar, de exemplu poze/*.jpg.
  • pathinfo: Împarte o cale de fișier în director, nume complet, nume fără extensie și extensie.
  • str_contains: Verifică dacă un text conține alt text. Returnează true sau false.