我glob用来寻找文件夹
$str = "Test Folder";
$folder = glob("$dir/*$str*");
Run Code Online (Sandbox Code Playgroud)
如何区分glob要匹配的文件夹,区分大小写?
匹配的测试文件夹,TEST FOLDER等
注意,这$str是脚本的未知输入!
我可以建议在 的每个字母上构建不区分大小写的字符范围吗$str?
代码:(演示)
\n\nfunction glob_i($string){ // this function is not multi-byte ready.\n $result=\'\'; // init the output string to allow concatenation\n for($i=0,$len=strlen($string); $i<$len; ++$i){ // loop each character\n if(ctype_alpha($string[$i])){ // check if it is a letter\n $result.=\'[\'.lcfirst($string[$i]).ucfirst($string[$i]).\']\'; // add 2-character pattern\n }else{\n $result.=$string[$i]; // add non-letter character\n }\n }\n return $result; // return the prepared string\n}\n$dir=\'public_html\';\n$str=\'Test Folder\';\n\necho glob_i($str); // [tT][eE][sS][tT] [fF][oO][lL][dD][eE][rR]\necho "\\n";\necho "$dir/*",glob_i($str),\'*\'; // public_html/*[tT][eE][sS][tT] [fF][oO][lL][dD][eE][rR]*\nRun Code Online (Sandbox Code Playgroud)\n\n如果您需要多字节版本,这是我建议的片段:(演示)
\n\nfunction glob_im($string,$encoding=\'utf8\'){\n $result=\'\';\n for($i=0,$len=mb_strlen($string); $i<$len; ++$i){\n $l=mb_strtolower(mb_substr($string,$i,1,$encoding));\n $u=mb_strtoupper(mb_substr($string,$i,1,$encoding));\n if($l!=$u){\n $result.="[{$l}{$u}]";\n }else{\n $result.=mb_substr($string,$i,1,$encoding);\n }\n }\n return $result;\n}\n$dir=\'public_html\';\n$str=\'testovac\xc3\xad slo\xc5\xbeku\';\n\necho glob_im($str); // [tT][eE][sS][tT][oO][vV][aA][cC][\xc3\xad\xc3\x8d] [sS][lL][oO][\xc5\xbe\xc5\xbd][kK][uU]\necho "\\n";\necho "$dir/*",glob_im($str),\'*\'; // public_html/*[tT][eE][sS][tT][oO][vV][aA][cC][\xc3\xad\xc3\x8d] [sS][lL][oO][\xc5\xbe\xc5\xbd][kK][uU]*\nRun Code Online (Sandbox Code Playgroud)\n\n相关 Stackoverflow 页面:
\n\nPHP 的 glob() 可以以不区分大小写的方式查找文件吗?
\n\nps 如果您不介意正则表达式的费用和/或您更喜欢简洁的单行代码,那么这将起到相同的作用:(演示)
\n\n$dir=\'public_html\';\n$str=\'Test Folder\';\necho "$dir/*",preg_replace_callback(\'/[a-z]/i\',function($m){return \'[\'.lcfirst($m[0]).ucfirst($m[0])."]";},$str),\'*\'; // $public_html/*[tT][eE][sS][tT] [fF][oO][lL][dD][eE][rR]*\nRun Code Online (Sandbox Code Playgroud)\n\n这是多字节版本:(演示)
\n\n$encoding=\'utf8\';\n$dir=\'public_html\';\n$str=\'testovac\xc3\xad slo\xc5\xbeku\';\necho "$dir/*",preg_replace_callback(\'/\\pL/iu\',function($m)use($encoding){return \'[\'.mb_strtolower($m[0],$encoding).mb_strtoupper($m[0],$encoding)."]";},$str),\'*\'; // public_html/*[tT][eE][sS][tT][oO][vV][aA][cC][\xc3\xad\xc3\x8d] [sS][lL][oO][\xc5\xbe\xc5\xbd][kK][uU]*\nRun Code Online (Sandbox Code Playgroud)\n