PHP检查字符串是不是包含不带http://的url

Posted

技术标签:

【中文标题】PHP检查字符串是不是包含不带http://的url【英文标题】:PHP check if string contains url without http://PHP检查字符串是否包含不带http://的url 【发布时间】:2012-01-05 06:33:27 【问题描述】:

查找字符串是否包含 url 的最佳方法是什么?

我正在写一个聊天框,需要拒绝在其中发布 url...

if(preg_match('/[a-zA-Z]+:\/\/[0-9a-zA-Z;.\/?:@=_#&%~,+$]+/', $clean_message, $matches))

die('INVALID!');

似乎对包含 http:// 的网址有效,但我还需要能够拒绝 youtube.com 等网址以及是否发布了 IP 地址等。

我需要保持聊天框的清洁,防止用户发送垃圾网址!

【问题讨论】:

何必呢?你永远不会停止像 www [dot] youtube [dot] com 这样的东西。过滤自动垃圾邮件发布,然后放手? 我可以向这样的 URL 发送垃圾邮件: s t a c k o v e r f l o w 。 c o m 您可以像 Office Communicator 一样,只需将 _ 添加到已知的 Web 协议。喜欢:_http://www.example.com。然后由另一端的人来跟进。 @Brad, str_replace("[dot]", ".", $url); @E3pO:无论你想出什么规则,我都能想出一个规避它的方法。 【参考方案1】:

可能你能做的最好的事情是:

/[\w\d\.]+\.(com|org|ca|net|uk)/

并添加所有其他常见的后缀。做类似的事情:

/[\w\d\.]+\.[\w\d]1,3/

可能过于笼统,但几乎可以捕捉到任何看起来像 URL 的东西。

【讨论】:

现在效果很好,但我们遇到了人们说“wow.that.is.cool!”之类的话的问题 wow.that.is.cool 可能是一个 url,我认为没有办法知道它不是。 您将不得不决定在允许某些网址通过和不让用户输入他们想要的不是网址的内容之间划清界限。无论如何,你最终都会得到一点。 实际上我刚刚意识到还有另一个问题,这将阻止“100.00”。您可能应该将 [\w\d\.] 替换为 [\w\d\.]*\w[\w\d\.]*

以上是关于PHP检查字符串是不是包含不带http://的url的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP switch 语句检查字符串是不是包含单词(但也可以包含其他单词)?

PHP:检查我的字符串是不是只包含数字和“X”字符

如何检查一个php字符串是不是只包含英文字母和数字?

如何使用 PHP 检查页面 url 中是不是包含 www?

如何使用 PHP 检查一个单词是不是包含在另一个字符串中?

ctype_alpha() 是检查字符串是不是仅包含字母的更好方法吗