(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
fnmatch — Проверяет совпадение имени файла с шаблоном
Функция fnmatch() проверяет, совпадает ли название файла или строка filename
с шаблоном pattern
, который состоит из подстановочных знаков командной оболочки.
pattern
Шаблон pattern
, с которым нужно сопоставить. Часто аргумент pattern
будет содержать подстановочные знаки вроде «?»
и «*»
.
Подстановочный знак | Описание |
---|---|
? | Вопросительный знак будет соответствовать любому отдельному символу. Например, шаблон «file?.txt» будет соответствовать названиям файлов «file1.txt» и «fileA.txt» , но не будет соответствовать названию файла «file10.txt» . |
* | Звёздочка будет соответствовать нулю или нескольким символам. Например, шаблон «foo*.xml» будет соответствовать названиям файлов «foo.xml» или «foobar.xml» . |
[ ] | Квадратные скобки создают диапазон кодовых точек кодировки ASCII или набор символов. Например, шаблон «index.php[45]» будет соответствовать названиям файлов «index.php4» и «index.php5» , но не будет соответствовать названию файла «index.phpt» . Диапазоны, которыми часто пользуются, — [0-9] , [a-z] и [A-Z] . Разрешено указывать больше одного набора или диапазона одновременно, например [0-9a-zABC] . |
! | Восклицательный знак указывают для совпадения с символами, которых нет в квадратных скобках. Например, шаблон «[!A-Z]*.html» будет соответствовать названию файла «demo.html» , но не будет соответствовать названию «Demo.html» . |
\ | Обратный слеш экранирует специальные символы. Например, шаблон «Name\?» будет соответствовать строке «Name?» , не будет соответствовать строке «Names» . |
filename
Проверяемая строка. Функцией часто проверяют имена файлов, но также проверяют строки.
Среднеподготовленные посетители сайтов пользуются шаблонами командной оболочки или хотя бы несложными формами подстановок вроде «?»
и «*»
. Поэтому для сопоставления поискового выражения, которое в пользовательской части сайта вводят незнакомые с программированием пользователи, вместо функции preg_match() лучше пользоваться функцией fnmatch().
flags
Параметр flags
принимает комбинации следующих флагов, которые объединяют двоичным оператором ИЛИ (|).
Флаг | Описание |
---|---|
FNM_NOESCAPE | Отключить экранирование обратным слешем. |
FNM_PATHNAME | Слеш в строке совпадает только со слешем в шаблоне. |
FNM_PERIOD | Ведущая точка в строке должна точно совпадать с точкой в шаблоне. |
FNM_CASEFOLD | Совпадение без учёта регистра. Часть расширения GNU. |
Пример #1 Проверка соответствия названия цвета шаблону подстановки командной оболочки
<?php
if (fnmatch("*gr[ae]y", $color)) {
echo "Какая-то форма серого цвета...";
}
?>
Функция пока недоступна на POSIX-несовместимых системах, кроме Windows.