2015-08-30 231 views
0

我試圖創建一個正則表達式來驗證我使用GridFS寫入的文件系統API的路徑名。正則表達式主要匹配字母數字路徑

我現在正則表達式^[A-Za-z0-9\-\[\]()$#_./]*$能滿足這一條件:

  • 允許a-zA-Z0-9-[]()$#_./

但是它不符合這些附加標準:

  • 第一字符必須是/
  • 連續不得出現多個/

問題:

  • 任何人可以幫助我解決我的正則表達式?
  • 是否有任何可能的問題使用我的路徑名稱標準? (我錯過了什麼重要的?)
+1

你可能想避免..路徑以及用於/one/../two –

+0

@SQLHacks例子是的,我想我會path.normalize是( node.js提供了一個方法來創建一個絕對路徑),謝謝你提出這個問題。 – Dodekeract

回答

3

不知道的路徑標準,但對於正則表達式,很簡單:

^\/(?!\/)([A-Za-z0-9\-\[\]()$#_.]|(\/(?!\/)))*$ 

\/(?!\/)意味着斜線/後面沒有斜槓(?!\/)。我用了兩次,一次作爲第一個字符,並且再次作爲第一個字符之後的可能匹配之一。

+0

似乎工作得很好,但'/'[需要被轉義](https://www.regex101.com/#javascript)就像這個'\ /'。我會盡快接受,但你應該編輯它。 – Dodekeract

+0

實際上,如果使用文字創建RegExp對象,只需要轉義即可。如果你使用新的RegExp('/(?!/)'),你不需要任何轉義。 – Amit

+0

真的嗎?該網站告訴我這是無效的。另外,我認爲你可以在最後加入時省略一對圓括號。 – Dodekeract

1

以下說明如何解決您的需求。要強制執行第一個字符/,只需在^之後加上即可。

^\/[A-Za-z0-9\-\[\]()$#_./]*$

爲了不讓連續斜線,你應該從你的字符集,刪除它,認爲設定爲路徑的一部分。部分將被斜線分隔。所以最終的正則表達式是:

^\/([A-Za-z0-9\-\[\]()$#_.]\/?)*$

相關問題