正则表达式 '<>' 验证

4

我目前正在构建一个正则表达式,可以接受URL和主机名。

因此,以下内容应该被接受:

google
google.com
www.google.com
http://google.com
http://www.google.com

然而,不应该接受的是:

<xml> <html>

我目前得到的表达式是:
([a-zA-Z0-9])|((http(s)?://)?([\w-]+\.)+[\w-]+(/[\w- ;,./?%&=]*)?)

但是表达式的这部分:([a-zA-Z0-9])
匹配<xml><html>

有人有什么建议吗?我错过了什么吗?


3
你使用的是什么语言?大多数语言都具有内置的URL验证功能,因此您可能不需要自己构建这个功能。 - Mike Brant
@Fiona,你是指字面上的字符串“<xml>”和“<html>”,还是指HTML和XML标签? - Jon Cairns
http://www.regular-expressions.info/anchors.html? - Bergi
3
这可能不是正则表达式的工作,而是使用您选择的编程语言中现有工具的工作。正则表达式并不是您可以在与字符串相关的每个问题上挥舞的魔杖。您可能想要使用已经编写、测试和调试过的现有代码。在PHP中,请使用parse_url函数。在Perl中,使用URI模块。在Ruby中,使用URI模块。在.NET中,请使用'Uri'类(http://msdn.microsoft.com/en-us/library/txt7706a.aspx)。 - Andy Lester
我的意思是两个都要.. 标签和文字字符串。 感谢您的帮助。 解决方案如下所示。 - Fiona
1个回答

5

您需要在您的表达式中添加开头(^)和结尾($)锚点,以确保只允许指定的模式:

^([a-zA-Z0-9]+)|((https?://)?([\w-]+\.)+[\w-]+(/[-\w ;,./?%&=]*)?)$

1
([a-zA-Z0-9]) 部分只匹配一个字符,因此一旦添加了 ^ 和 $,那也需要进行更正:([a-zA-Z0-9]+) - Brian Stephens
@BrianStephens 谢谢,我已经纠正了那个问题并且修复了其他一些相对较小的点。 - p.s.w.g

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接