2010-11-11 99 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