Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除错误的Windows文件名字符_Php_Regex - Fatal编程技术网

Php 删除错误的Windows文件名字符

Php 删除错误的Windows文件名字符,php,regex,Php,Regex,我发现这个函数可以测试字符串是否对Windows文件名和文件夹友好: function is_valid_filename($name) { $parts=preg_split("/(\/|".preg_quote("\\").")/",$name); if (preg_match("/[a-z]:/i",$parts[0])) { unset($parts[0]); } foreach ($parts as $part) { pri

我发现这个函数可以测试字符串是否对Windows文件名和文件夹友好:

function is_valid_filename($name) {
    $parts=preg_split("/(\/|".preg_quote("\\").")/",$name);
    if (preg_match("/[a-z]:/i",$parts[0])) {
       unset($parts[0]);
    }
    foreach ($parts as $part) {
        print "part = '$part'<br>";
       if (preg_match("/[".preg_quote("^|?*<\":>","/")."\a\b\c\e\x\v\s]/",$part)||preg_match("/^(PRN|CON|AUX|CLOCK$|NUL|COMd|LPTd)$/im",str_replace(".","\n",$part))) {
          return false;
       }
    }
    return true;
 }
函数是有效的\u文件名($name){
$parts=preg\u split(“/(\/”)。preg\u quote(“\\”)/”,$name);
如果(预匹配(“/[a-z]:/i”,$parts[0])){
未设置($parts[0]);
}
foreach($parts作为$part){
打印“part='$part'
”; 如果(preg_match(“/[”).preg_quote(“^ |?*)符合Gordon's,则给出:

$bad = array_merge(
        array_map('chr', range(0,31)),
        array("<", ">", ":", '"', "/", "\\", "|", "?", "*"));
$result = str_replace($bad, "", $filename);
$bad=array\u merge(
数组映射('chr',范围(0,31)),
数组(“,”:“,”,“/”,“\\”,“\\”,“?”,“*”);
$result=str_replace($bad,“,$filename);

(参考)不止这些。例如,保留的名称也必须删除。Windows不允许您命名文件
CON.PHP
-我们都知道这是一项功能,不是吗;)@Gordon实际上,您链接到的msdn文档页面上说允许使用
CON.PHP
,但不鼓励使用它。@试一下。创建一个新文件,将其命名为
CON.PHP
。Windows(Vista)将告诉您这是一个无效的设备名,并拒绝接受它。您也可以执行
CON。无论什么
,都是一样的。@Gordon windows资源管理器不允许您使用这一事实毫无意义。我可以用这个程序创建这样的文件:@artifact可能是,但引用仍然明确声明不要使用以下保留的设备名文件名。建议仅用于保留名称加扩展名,例如,不建议使用
con.php
,而只建议使用
con