2013-07-18 199 views
1

我有一個FileUpload控件,需要驗證使用RegularExpressionValidator瀏覽的FileName。我正在使用這個正則表達式:^[[email protected]]*$。但它也檢測目錄中的特殊字符。例如。在C:\Sample FIle.txt中的\:。另一個問題是需要使用靜態類來存儲正則表達式。因此,在包含FileUpload控件的用戶控件的加載中,有類似於this.RegexValidatorControl.ValidationExpression = SampleClass.FileNameRegex,其中FileNameRegex被聲明爲靜態字符串^[[email protected]]*$正則表達式檢查輸入目錄/路徑中的文件名中的特殊字符

任何幫助我應該如何處理?

有2個要求:

  1. 的RegularExpressionValidator應該被使用。
  2. 正則表達式存儲在一個靜態類的靜態成員中。
+0

僅供參考'^路徑[a-ZA-Z0-9 _ @ .-] * $'永遠曾匹配反斜槓或':'所以我懷疑這個問題不是你的正則表達式。還要注意你的正則表達式會匹配空字符串,所以你可以使用'^ [a-zA-Z0-9 _ @ .-] + $'。如果你有一個[非Unicode實現](http://msdn.microsoft.com/en-us/library/ms972966.aspx#regexnet_topic8),你可以使用'^ [\ w @ .-] + $ '這是更短的:) – HamZa

+0

感謝您的意見。我意識到我需要接受:和\以及一個。僅用於文件擴展名。你有什麼建議使用什麼正則表達式?謝謝 – devspider

+0

多少個點[?](http://chat.stackoverflow.com/rooms/25767)如果有幾個然後'[\ w @。:\\\- - ] + $'會完成這項工作。 – HamZa

回答

0

這實際上做的伎倆: ^[A-Za-z0-9 _]*[A-Za-z0-9 ._:\\]*[\.]?[A-Za-z0-9]+$

此接受只有1 .

0

我認爲像下面提供了一個Windows文件名/目錄結構的得體的搭配:(需要注意的是黑名單來自Windows資源管理器試圖在一個壞的字符輸入後)

^[A-Z]:(\\[^\\/:*?"<>|]+)+.\w+$ 

例子匹配:

$ grep -P '^[A-Z]:(\\[^\\/:*?"<>|]+)+.\w+$' file_list.txt 
C:\Sample File5.txt 
C:\Program Files (x86)\Windows\file.exe 
C:\Program Files\Jon's folder\file.pdf 
C:\my-file.txt 
C:\[email protected]^&[]{}!#i.txt.exe 

如果你想改變這種狀況到白名單,相應地修改:

$ grep -P '^[A-Z]:(\\[\w\[email protected]]+)+.\w+$' file_list.txt 
C:\Sample File5.txt 
C:\my-file.txt