[英]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.