在我的asp.net應用程序,我限制允許的URL格式定期expressions.I需要創建一個正則表達式,將不允許在URL中正則表達式,以防止相鄰重複破折號
01相鄰破折號)允許的URL像
text1-text2.htm
text1-text2-textn.htm
02)防止對URL像
text1--text2.htm
text1--text2-textn.htm
在我的asp.net應用程序,我限制允許的URL格式定期expressions.I需要創建一個正則表達式,將不允許在URL中正則表達式,以防止相鄰重複破折號
01相鄰破折號)允許的URL像
text1-text2.htm
text1-text2-textn.htm
02)防止對URL像
text1--text2.htm
text1--text2-textn.htm
應該是足夠的搜索問題-{2,}
,然後做了否定。也就是說,只要這個正則表達式(連續兩個或更多破折號)不匹配,它就是有效的。
或正正則表達式匹配只有網址你想:^([A-Za-z0-9]+-?)+\.htm$
試試這個正則表達式:
/--/
如果你找到了一個匹配,那麼就意味着URL有兩個破折號。
不能我們限制它在正則表達式本身,即。 「不匹配」,如果我有URL包含雙相鄰循環破折號?我在數據庫中重寫了規則,因此可以通過更改一個數據庫記錄來實現更改。 – DSharper
不,我認爲這在正則表達式本身中是不可能的。你必須在匹配的代碼中放入一個「NOT」運算符。我認爲對於你的情況,你必須使用'正面匹配',從雷看下面的答案。 –
這將匹配一個文件名與0或更多的單一破折號出現後跟一些單詞字符。
^\w+(-\w+)*\.\w+
'test-test.test-test.html'失敗。 –
url.Contains("--")
會爲你工作,其中url
變量輸入的網址。精緻而簡潔,您不必擔心RegEx。
'!url.Contains(「 - 」)'#pedantic :-) –
發表阿齊茲的否定的回答是最好的,但只是爲了完整性起見,這裏是一個你希望接受(而不是拒絕)種的字符串相匹配的正則表達式:
你想由一串零個或多個以下:
一種用於此正則表達式是
/^(?:[^-]|-(?!-))*$/
現在,您可以調整[^ - ]部分接受不只是任何字符在所有,但在URL允許只有這些字符(也就是說,如果你想匹配除了所有可能的網址那些有兩個連續的破折號)。要做到這一點,你必須找到提供URI語法的RFC。會有些乏味,這就是爲什麼與/--/
結合其他檢查的負面解決方案是你最好的選擇。
您應該從您的正則表達式中刪除脫字符和美元符號。你建議OP尋找出現在字符串中任何位置的「 - 」,然後否定。但是在插入符號和美元符號的情況下,您的正則表達式只能匹配兩個或更多破折號的整個字符串。 –
@好的,謝謝,已經在想另一個。 –