2010-07-08 117 views
0

可能重复:
Regular expression for browser Url正则表达式的URL的正则表达式

这是正则表达式完美的任何网址?

preg_match_all(
'/([www]+(\.|dot))?[a-zA-Z0-9_\.-]+(\.|dot){1,}[com|net|org|info\.]+((\.|dot){0,}[a-zA-Z]){0,}+/i', 
$url, $regp); 
+3

'[www]'不是你想象的那样。阅读[字符类](http://www.regular-expressions.info/charclass.html) – Amarghosh 2010-07-08 10:43:18

+1

你自己写了吗?你的意思是什么网址? – Gumbo 2010-07-08 10:43:41

+1

'博物馆'是一个有效的顶级域名,如'com','net'等 – Amarghosh 2010-07-08 10:44:35

回答

0

[www]+应改变(www)?

(\.|dot){1,} - 一个多? mayby你想要做([a-zA-Z0-9_\.-]+(\.|dot)){1,}

0

A URL也有一个协议,如http,你错过了。正如已经提到的,您还缺少很多顶级域名。

类似于转义空间(%20)的东西也不会被识别。

端口号也可以出现在URL时(如:80)

+0

URL也可以是相对的。即使是空字符串也是一个有效的URL。 – Gumbo 2010-07-08 10:50:41

+0

根据您想要的迂腐程度,相对* URI *不会被归类为* URL *。 – bobince 2010-07-08 10:58:58

+0

@bobince:这一切都取决于您的术语来自哪些规范:RFC 1808规定* URL *是资源定位符中最常用的术语,而RFC 3986使用术语* URI-reference *。 – Gumbo 2010-07-08 11:10:02

0

不,你不能创建一个正则表达式,将解析任何URI(或URL或URN) - 在唯一方法来解析他们正确地阅读它们的规范RFC-3986

1

不,实际上它根本不匹配URL。它试图检测用文本编写的主机名,如www.example.com

其做法是尝试检测一些常见的已知的顶级域名,但:

[com|net|org|info\.]+ 

实际上是一个字符组,允许从列表|.comnetrgif任何字符序列。大概这是意味着:

((com|net|org|info)\.)+ 

[www]同样是错误的,加上dot企业没有真正使任何意义。

但这通常是一个非常糟糕的主意。有方式更常用的顶级域名,而不仅仅是那些和两个字母的CCTLD。还有很多/大多数CCTLD没有com/net/org/info的二级域名。这个表达式将无法匹配这些表达式,并且会匹配一些其他不应该成为主机名的东西。

事实上,检测主机名的任务基本上是不可能的,因为单个单词可以是主机名,任何点分隔的单词序列都可以。 (并且自引入国际化域名以来,几乎任何东西都可以成为主机名,例如例え.テスト。)

+0

IP地址也是一个有效的主机:'http:// 127.0.0.1 /'是一个有效的绝对URL。 – Gumbo 2010-07-08 10:59:42

+0

...更不用说IPv6地址!尝试在文本中匹配主机名/ IP地址永远不会可靠。 – bobince 2010-07-08 11:02:13

1

'any'url是一个强硬的调用。在OZ你有.com.au,在英国它是.co.uk每个国家都有自己的规则,他们可以改变。 .xxx刚刚获得批准。非ASCII字符现在已被批准,但我怀疑你不需要这些字符。

我想知道你为什么要验证那是紧的?许多正确的网址将被排除,并且不排除所有不正确的网址。 www.thisisnotavalidurl.com仍然会被接受。 A)使用松散检查,仅用于([a-zA-Z0-9 _.-]。)* [a-zA-Z0-9 _.-](或somthing),就像一个完整性检查 B)使用反向查找来检查URL是否真的有效,如果你只想允许实际的真实URL。

哦,我发现这个:http://www.fileformat.info/tool/regex.htm是一个非常有用的工具,如果我正在开发正则表达式,我不擅长。

+0

我可以和.com网址绕过这个正则表达式吗? – ITGuru 2010-07-10 07:21:57

+0

可以通过这个REGEX preg_match_all( '/([www]+(\.|dot))?[a-zA-Z0-9_\.-]+(\.|dot ){1,} [com | net | org | info \。] +((\。| dot){0,} [a-zA-Z]){0,} +/i', $ url,$ regp); – ITGuru 2010-07-10 07:22:37