2010-11-11 110 views
0

我有一個asp.net應用程序,其中我有一個URL的文本框。我正在使用正則表達式進行驗證。我的正則表達式是這樣的:^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$正則表達式修改

但現在我有一個增強象文本始終保持HTTP的文本://。那時這個表達式的驗證必須忽略默認文本(http://)。怎麼可能?請幫我解決這個問題。

回答

1

您的表情與http://部分相匹配,因此它會「保留」該部分匹配項。如果您正在驗證的文本框根本不包含該部分,只需從您的正則表達式中刪除(ht|f)tp(s?)\:\/\/即可。

如果它是文本框的一部分,但您想在匹配它之後忽略它,那麼您可以在您的預期匹配周圍捕獲括號。然後你原來的正則表達式應該是這樣的:

^(ht|f)tp(s?)\:\/\/([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?)$ 

現在的部分,而不http://ftp://等將在反向引用數3

這就是說,因爲目前的情況是你的正則表達式是非常糟糕的,也不正確(很多不必要的轉義,不必要的括號,錯誤構造的字符類(帶有端口號的URL將失敗),並且我很確定你不想要&那裏)...

這並不容易用正則表達式驗證URL。你有什麼打算?什麼應該是有效的,什麼不應該是? //或者ftp://作爲可選的正則表達式的起點,這使得HTTP

使用((ht|f)tp(s?)\:\/\/)? -

+0

我想爲HTTP的一部分之後驗證的表情://。因爲http //文本總是顯示。 – MAC 2010-11-11 09:16:06

+0

你的意思是它在文本框外?那麼就從我的答案的第一句中列出的正則表達式中刪除該部分。 – 2010-11-11 09:31:18

0

你可以試試這個。

你完整的正則表達式會 -

^((ht|f)tp(s?)\:\/\/)?[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$ 
+0

但是,如果它在那裏,它仍然會匹配,因此不會被忽視,因爲Dilse Naaz期待它。 – 2010-11-11 09:11:57

+0

@Tim - 我將這個問題理解爲匹配不包含http://的url。您可能是對的,在這種情況下,我認爲我們需要刪除'^((ht | f)tp(s?)\): \/\ /)?'從正則表達式。但正如你所說,它仍然是不正確的,因爲有很多其他不必要的轉義 – 2010-11-11 09:14:16

+0

另外我不知道爲什麼OP需要忽略來自正則表達式匹配http://。如果它始終可用,並且如果當前的正則表達式正在工作,爲什麼要從正則表達式中刪除或忽略http://等。我不認爲這個權利有任何與性能相關的問題? – 2010-11-11 09:16:55