2011-10-14 37 views
0

在我的asp.net應用程序,我限制允許的URL格式定期expressions.I需要創建一個正則表達式,將不允許在URL中正則表達式,以防止相鄰重複破折號

01相鄰破折號)允許的URL像

text1-text2.htm 
text1-text2-textn.htm 

02)防止對URL像

text1--text2.htm 
text1--text2-textn.htm 

回答

0

應該是足夠的搜索問題-{2,},然後做了否定。也就是說,只要這個正則表達式(連續兩個或更多破折號)不匹配,它就是有效的。

或正正則表達式匹配只有網址你想:^([A-Za-z0-9]+-?)+\.htm$

+0

您應該從您的正則表達式中刪除脫字符和美元符號。你建議OP尋找出現在字符串中任何位置的「 - 」,然後否定。但是在插入符號和美元符號的情況下,您的正則表達式只能匹配兩個或更多破折號的整個字符串。 –

+0

@好的,謝謝,已經在想另一個。 –

1

試試這個正則表達式:

/--/ 

如果你找到了一個匹配,那麼就意味着URL有兩個破折號。

+0

不能我們限制它在正則表達式本身,即。 「不匹配」,如果我有URL包含雙相鄰循環破折號?我在數據庫中重寫了規則,因此可以通過更改一個數據庫記錄來實現更改。 – DSharper

+0

不,我認爲這在正則表達式本身中是不可能的。你必須在匹配的代碼中放入一個「NOT」運算符。我認爲對於你的情況,你必須使用'正面匹配',從雷看下面的答案。 –

0

這將匹配一個文件名與0或更多的單一破折號出現後跟一些單詞字符。

^\w+(-\w+)*\.\w+ 
+0

'test-test.test-test.html'失敗。 –

1

url.Contains("--")會爲你工作,其中url變量輸入的網址。精緻而簡潔,您不必擔心RegEx。

+0

'!url.Contains(「 - 」)'#pedantic :-) –

1

發表阿齊茲的否定的回答是最好的,但只是爲了完整性起見,這裏是一個你希望接受(而不是拒絕)種的字符串相匹配的正則表達式:

你想由一串零個或多個以下:

  • 非劃線字符,或
  • 破折號隨後的非劃線

一種用於此正則表達式是

/^(?:[^-]|-(?!-))*$/ 

現在,您可以調整[^ - ]部分接受不只是任何字符在所有,但在URL允許只有這些字符(也就是說,如果你想匹配除了所有可能的網址那些有兩個連續的破折號)。要做到這一點,你必須找到提供URI語法的RFC。會有些乏味,這就是爲什麼與/--/結合其他檢查的負面解決方案是你最好的選擇。

相關問題