2014-07-01 127 views
3

在asp.net應用程序中,我需要根據可配置的正則表達式驗證用戶輸入。我有一個db中的正則表達式列表,它是用戶可配置的,而不是固定的。 我的問題是,在這些正則表達式中,點是爲了匹配不是任何字符,而是任何「合理」字符(在該上下文中合理:字母,數字和其他ascii字符)。因此,驗證過程是在2個步驟使用正則表達式在正則表達式中查找正則表達式

進行了
  1. 覈對REG EXP從列表
  2. 對證的東西,如^[\w.+/-]*$

「合理」的角色,我想用一個單一的正則表達式,這樣我就可以將它放在頁面上的一個正則表達式驗證器中 - 這可以提供更好的用戶體驗。我可以這樣做,搜索正則表達式中的點,並用我的更嚴格的字符類[\w.+/-]替換。 但並非所有的點在正則表達式中都有相同的含義。

所以我的問題是:有一種可靠的方法來找到正則表達式中的點,但只有當作爲一個字符類使用?一個正則表達式可能?

+0

所以你是問如何解決表達式濫用'。 '?你將如何確定哪些點實際上意味着「某個其他類」?有沒有特定的模式? –

+0

@PanagiotisKanavos是的。任何在正則表達式中具有該含義的點,例如不是[,。 - ]具有字面意思。 – edc65

+0

我問的是 - 你怎麼能知道一個點在這裏意味着一件事,但後來又有幾個角色? 「[,.-]」可能需要區別對待的唯一提示是您的評論,或者假設如果一個組包含與「其他」重複的含義,則不應將其視爲「其他」含義。 –

回答

2

爲了在同一頁上找到a.b[.]\.\[.\[\],應該找到兩個點:在ab之間,以及轉義括號之間的最後一個點。其他的是文字時期。

幸運的是,ASP.NET並不知道約\Q\E轉義模式片段。

你可以使用這個表達式:

(?<!\\)\.(?!(?:\\\[\]\[]|[^][])*(?<!\\)\]) 

the demo,觀察,只有正確的點得到匹配。

說明

  • 的回顧後(?<!\\)確保我們不會被轉義的反斜線
  • \.前面匹配的點,我們希望
  • 負前瞻(?!(?:\\\[\]\[]|[^][])*(?<!\\)\])確保我們不跟...
  • (?:\\\[\]\[]|[^][])*任意數量的\[\], or non [] chars,然後
  • 沒有反斜槓前面有一個右括號:(?<!\\)\]

參考

+0

哇!感謝您的參考鏈接 – edc65

+0

不客氣。可愛的問題,很高興它有幫助。 :) – zx81

相關問題