簡體   English   中英

從字符的最后一個實例匹配(如果存在)以驗證正則表達式中帶有擴展名的文件名

[英]Matching from last instance of character if present to validate filename with extension in regex

我正在嘗試使用 Asp.net 2.0 Webforms 中的正則表達式驗證器來限制用戶上傳Long named files和不unaccepted file extensions 我希望filename to be withing 30字符[由於 Db 設計的限制],並且擴展名匹配png,jpeg,zip,rar,7z 。我想出了這個正則表達式,它確保文件名是有效字符,然后來. 字面句號,然后是擴展名。

^[\w_]{3,28}\.(pdf|jpeg|png)$

更新:我想出了這個正則表達式,它甚至匹配最后一個實例,只有長文件名得到驗證

(\\(?!.*\\)|)[\w_]{3,30}\.(pdf|jpeg|jpg|pdf)$

更新:即使這樣也只是文件名不限於 30 個字符

[\w]{3,30}\.(pdf|jpeg|jpg|pdf)(?=)

信息:它甚至驗證c:\fakePath\stackoverflowstackoverflowstackoverflowstackoverflow順便說一句,它突出顯示了文件名中的最后 30 個字符。

問題是我希望在上傳時在客戶端上完成驗證,因此EnableClientScript = True ,但令我驚訝的是,控件驗證的 fileUpload.value 在大多數瀏覽器中完全不同。

Firefox 報告:filename.extension 符合預期,

Internet Explorer 報告了文件的完整路徑

chrome 報告 C:\fakePath\fileName.extension

現在我如何為此編寫表達式,我的想法是查找\字符的最后一個實例(如果存在於值中),然后從那里開始。 但我對正則表達式的了解完全限於基礎知識。 有人可以糾正我並提供一個有效的正則表達式,

注意:請在提供之前確保它符合我的要求,跨瀏覽器工作並在客戶端驗證。

我建議這樣做:

\b\w{3,30}\.(?:pdf|jpe?g|png|7z|zip|rar)$

這匹配從單詞邊界開始的文件名(沒有\b它可能會在過長文件名的中間開始匹配)。 文件名中只允許使用 ASCII 字母、數字和下划線(無重音字符)。 點也是禁止的。

請記住使用正則表達式文字符號構造正則表達式:

var myregexp = /\b\w{3,30}\.(?:pdf|jpe?g|png|7z|zip|rar)$/;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM