正则表达式修改

时间:2010-11-11 09:01:43

标签: javascript asp.net regex

我有一个asp.net应用程序,其中我有一个URL文本框。我正在使用正则表达式进行验证。我的正则表达式是这样的:^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$

但现在我有一个增强功能,如文字始终保留 http:// 的文字。那时此表达式的验证必须忽略默认文本(http://)。怎么可能?请帮我解决这个问题。

2 个答案:

答案 0 :(得分: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将在这里失败),我很确定你不要不希望&在那里... ...

使用正则表达式验证网址并不容易。你的意图是什么?什么应该有效,什么不应该?

答案 1 :(得分:0)

你可以试试这个 -

在正则表达式的开头使用((ht|f)tp(s?)\:\/\/)?,这使得http://或ftp://成为可选项。

你的完整正则表达式是 -

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