2011-05-12 44 views
0

我得到了正確的正則表達式。僅適用於Firefox。我如何使這個跨瀏覽器,跨平臺的方式。由於它是文件名和擴展驗證你是正確的,我正在使用文件上傳控制。使用簡單的正則表達式驗證瀏覽器上傳文件名和擴展名

^[a-zA-Z0-9_\.]{3,28}(.pdf|.txt|.doc|.docx|.png|.gif|.jpeg|.jpg|.zip|.rar)$ 

匹配文件名不能爲空[3,28個字符長]。

分機必須在組內。

當這項工作在Forefox中非常出色我假設,因爲fileUpload.value = Filename.extension在Firefox中。 Google chrome和IE很失敗。我正在使用.net正則表達式驗證器和ClientScript啓用。

我知道如何在服務器上驗證它,所以請不要使用服務器端解決方案。

注:

谷歌chrome:

提供FileUpload控件值C:\ fakePath \ filename.extension

IE:

提供了完整的路徑。

+0

請提供輸入一些例子嘗試匹配並哪兒失敗 – 2011-05-12 06:22:57

回答

3

如果您有時有完整路徑但只對文件名感興趣,則不能使用^開始。歸檔的點應該逃脫。

你可以嘗試這樣的事:

[^\\/]{3,}\.(pdf|txt|doc|docx|png|gif|jpeg|jpg|zip|rar)$ 


,因爲它看起來你只能使用Firefox的文件,但與其他瀏覽器的完整路徑。
我總是爲您的字符串添加前綴/,並驗證最後一個文件選擇器/\之後的最後一部分。

本示例使用lookahead在文件之前檢查文件分隔符(或手動添加/),並且還允許檢查文件名最大28字符。看到這個online regex tester

(?<=[\\/])[\w\.]{3,28}\.(?:pdf|txt|doc|docx|png|gif|jpeg|jpg|zip|rar)$ 
+0

感謝有價值說明。這個正則表達式現在適用於各種瀏覽器。 – Deeptechtons 2011-05-25 16:27:55

0

就目前情況來看,你的正則表達式驗證的垃圾像下面這樣:

  • ....pdf
  • ____pdf

它也拒絕完全有效的文件:

  • i.jpg
  • my-pic.jpg
  • pic.JPG

最簡單的是驗證在多個步驟的事情:

  1. 提取擴展目標:

    \.[a-zA-Z]{3,4}$ 
    
  2. 下如果是擴展並且針對可接受值的數組進行驗證。

  3. 有選擇性地驗證該文件的名稱(雖然我建議你清洗它,而不是):

    [a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)* 
    
相關問題