正在验证Powershell中的文件名输入



我想在PowerShell中验证文件名的输入并检查它是否包含无效字符。我尝试过以下方法,当只输入其中一个字符时,这种方法有效,但当给定的字母数字字符串包含这些字符时,它似乎不起作用。我相信我没有正确构造regex,验证给定字符串是否包含这些字符的正确方法是什么?提前谢谢。

#Validate file name whether it contains invalid characters:  / : * ? " < > |
$filename = "?filename.txt"
if($filename -match "^[\/:*?<>|]*$")
    {Write-Host "$filename contains invalid characters"}
else
    {Write-Host "$filename is valid"}

我会使用Path.GetInvalidFileNameChars()而不是在正则表达式模式中硬编码字符,然后使用String.IndexOfAny()方法来测试文件名是否包含任何无效字符:

function Test-ValidFileName
{
    param([string]$FileName)
    $IndexOfInvalidChar = $FileName.IndexOfAny([System.IO.Path]::GetInvalidFileNameChars())
    # IndexOfAny() returns the value -1 to indicate no such character was found
    return $IndexOfInvalidChar -eq -1
}

然后:

$filename = "?filename.txt"
if(Test-ValidFileName $filename)
{
    Write-Host "$filename is valid"
}
else
{
    Write-Host "$filename contains invalid characters"
}

如果你不想定义一个新的函数,可以简化为:

if($filename.IndexOfAny([System.IO.Path]::GetInvalidFileNameChars()) -eq -1)
{
    Write-Host "$filename is valid"
}
else
{
    Write-Host "$filename contains invalid characters"
}

修复正则表达式:

尝试移除将其锚定到字符串末尾的^$

相关内容

  • 没有找到相关文章

最新更新