具有端口验证的URL的正则表达式

时间:2011-06-12 10:27:07

标签: regex

我需要像网络服务器那样验证网址。 像http://localhost:8080/xyz

这样的东西

我们如何使用正则表达式来做到这一点。对不起,是regex的新手。

1 个答案:

答案 0 :(得分:7)

相关规范可以在rfc 3986中找到,并包含所有可能的url组件的常规语法定义。但是,出于您的目的,这些可能过于笼统。一个有点浓缩的表达式只匹配http(s)协议下的URL是

http[s]?://(([[:alpha:][:digit:]-._~!$&'\(\)*+,;=]|%([0-9A-F]{2}))+|([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))(:[0-9]+)?(/([[:alpha:][:digit:]-._~!$&'\(\)*+,;=]|%([0-9A-F]{2}))*)+(\?([[:alpha:][:digit:]-._~!$&'\(\)*+,;=/?]|%([0-9A-F]{2}))+)?(#([[:alpha:][:digit:]-._~!$&'\(\)*+,;=/?]|%([0-9A-F]{2}))+)?

可以简化为

http[s]?://(([^/:\.[:space:]]+(\.[^/:\.[:space:]]+)*)|([0-9](\.[0-9]{3})))(:[0-9]+)?((/[^?#[:space:]]+)(\?[^#[:space:]]+)?(\#.+)?)?

如果您对url组件的正确语法有信心。

请注意,您可能希望使用更具限制性的模式,例如用于全文搜索,仅允许iana注册的顶级域名。

希望它有所帮助,

最好的问候,carsten

相关问题