正如标题所说,但我正在使用的正则表达式有一些小问题。我对正则表达式不太好,你可以看到
我正在尝试删除用户添加到字符串中的所有网址。
但是,由于用户“狡猾”,他们会尝试稍微更改URL,以免触发我的删除代码,因此我的下面的正则表达式也会在略微修改的URL上匹配(因此我没有使用传统的ULR正则表达式)。我知道总是可以欺骗我的删除代码,但我想尽可能地努力
我遇到的问题是,如果用户添加一个句子然后完全停止,但是没有正确的空格,则下面的正则表达式匹配。我想尽可能地限制这一点。
例如以下所有匹配:
this.matches(i 不希望此匹配)。
mysite.co.xx(我想要匹配)。
http:// www.mysite.co.xx(我想要匹配)
我试图限制最后一个“。”之后的字符。到2到4之间,但我正在努力解决如何做到这一点。
以下代码就是我正在使用的代码。
define('REG_URL', '@((https?://|https?://\s)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@');
public function stripURLs($string){
try {
$replacement = "[** website removed **]";
$string = preg_replace(REG_URL, $replacement, $string);
return $string;
}
catch (Exception $e){
error_log('checksubmitted.class.php MLE_Check.stripURls - Exception caught: '.$e->getMessage());
return false;
}
}
如果有人能指出我如何做我想做的正确方向,我将非常感激。
如果有人知道这里有任何类似问题(我找不到)或任何其他网站提供删除“狡猾”网址的建议,我将再次感激,如果可以指出这一点。
答案 0 :(得分:0)
这是我个人对验证网址的偏好:
_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$_iuS