2012-09-14 15 views
0

我想限制一些類型的文件格式,並允許在正則表達式驗證表達式所有其他人。我所嘗試的是指定一些允許的和一些受限制的文件類型,但我想指定受限制的文件類型並允許所有其他類型上傳。如何限制某些文件類型,並允許所有其他的正則表達式Asp.net

我使用與asp.net文件上傳控制的正則表達式。我的正則表達式是這樣的,現在

^.*\.(csv|xlsx|xls|doc|docx|pdf|txt|zip|(?!exe)|(?!bat)|(?!msi))$ 

它的做工精細,限制exe文件蝙蝠和MSI,但我希望讓所有其他文件格式

+1

爲什麼使用正則表達式?你爲什麼不簡單地使用允許的擴展名的'string []'? –

+0

在我的應用即時通訊使用asp.net驗證,以保持一致性我想在這裏使用asp.net正則表達式 –

+0

您可以使用['CustomValidator'](http://msdn.microsoft.com/zh-cn/ -us /庫/ system.web.ui.webcontrols.customvalidator.aspx)。只需處理服務器驗證以檢查擴展並返回'e.args = true;'如果沒有問題。 –

回答

1

使用負回顧後:

/^.*(?<!\.(exe|bat|msi))$/i 

的你使用的負向預測不能幫助你。完全一樣。他們因爲你想在字符串的結尾匹配他們,lookarounds不消耗任何東西,所以在字符串中的最後一個位置不能有EXE或蝙蝠後是平凡真實的。

一步一步的解釋,爲後人的緣故:

^ 

匹配字符串的開始,因爲我敢肯定,你知道的。

.* 

消耗整個字符串。

(?<! ...) 

回過頭來,確保我們沒有消耗....

\. 

逐字點,其次是...

(exe|bat|msi) 

我們的任何verbotten文件類型。

$ 

然後匹配字符串的末尾。

我也選擇了以使其不區分大小寫。

編輯,對於JS:

/^(.(?!\.(exe|bat|msi)$))*/i 

Moar不同的解釋:

^ 

頂部字符串

(

啓動組

. 

任意字符

(?!...) 

負先行。未遵循:

\. 

文字點。

(exe|bat|msi) 

禁止的文件類型。

$ 

結束字符串

)*

關閉組和匹配的任意次數的。

+0

當我嘗試這個在RegularExpressionValidatorEvaluateIsValid函數中給我一些javascript錯誤 –

+0

這是因爲JavaScript不支持lookbehinds。 – FrankieTheKneeMan

相關問題