2016-04-04 7 views
2

Dosya adı için girişi doğrulamak ve PowerShell'de geçersiz karakterler içerip içermediğini kontrol etmek istiyorum. Bu karakterden sadece biri girildiğinde işe yarayan ancak verilen bir alfanümerik dizenin bu karakterleri içerdiğinde işe yaramayacak olan yaklaşımı denedim. Regex'i doğru şekilde oluşturmadığımı düşünüyorum, verilen dizenin bu karakterleri içerip içermediğini doğrulamanın doğru yolu ne olurdu? Şimdiden teşekkürler. SonraDosya adı girişini Powershell'de doğrulayın

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 
    if($IndexOfInvalidChar -eq -1) 
    { 
     return $true 
    } 
    else 
    { 
     return $false 
    } 
} 

ve:

#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"} 

cevap

4

Ben dosya adı geçersiz karakterlerden herhangi içeriyorsa sınamak için String.IndexOfAny() method kullanmak sonra yerine bir düzenli ifade deseni karakterleri kodlamak yerine Path.GetInvalidFileNameChars() kullanırlarsa ve

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

bir NE tanımlamak istemiyorsanız

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

İstenirse, normal bir ifade deseni şu şekilde oluşturulabilir: '' [{0}] '-f [regex] :: Escape (([IO.Path] :: GetInvalidFileNameChars() -join' ')) –

+0

Mathias, basitleştirilmiş yaklaşım işe yaradı ve aradığım şey buydu. Teşekkür ederim. – user5349170

1

regex düzeltmek için:: fonksiyonu w, bu şekilde basitleştirilmiş olabilir

kaldırmayı deneyin ^ ve $ hangi dizesinin uçlarına çapa bunu.

+0

^ve $ 'nin kaldırılması, düzeltildi. GetInvalidFileNameChars() kullanarak Mathias yaklaşımı iyi görünüyor/çalıştı. – user5349170