隐藏给定字符串中包含的任何URL,除了一个

时间:2014-07-16 09:37:40

标签: php regex validation preg-replace url-validation

我有一个预订网站,其中包含一个小型聊天系统,允许潜在的客人向主持人发送消息,例如询问房间是否可用。

我希望用户输入的任何网址都被隐藏(=替换为****),除非它是我的网站域名的网址。 我目前有一个成功匹配任何网址的正则表达式:

    $replacing_string = '****';

    $userMessage = preg_replace('{\b(?:http://)?(www\.)?([^\s]+)(\.com|\.org|\.net|\.it)\b}mi', $replacing_string, $userMessage);

我需要对其进行编辑,以便我可以匹配除 mydomain.com

之外的所有网址

这些字符串的预期结果:

“嗨,请查看我的网站www.othersite.com/room/123”

在preg_replace之后:

“嗨,请检查我的网站****”


“嗨,这个房间有空吗?www.mydomain.com/room/123”

在preg_replace之后:

“嗨,这个房间有空吗?www.mydomain.com/room/123”

1 个答案:

答案 0 :(得分:0)

否定前瞻

我们可以通过对现有正则表达式的最小更改来实现此目的:

$userMessage = preg_replace('(?!.*mydomain\.com){\b(?:http://)?(www\.)?([^\s]+)(\.com|\.org|\.net|\.it)\b}mi', $replacing_string, $userMessage);

否定先行(?!.*mydomain\.com)声称接下来的内容不是某些字符mydomain.com

<强>参考