猿问

PHP阻止URL和域,但允许电子邮件地址

我有一种方法可以用来清除用户提交的数据中的输出。我可以传递选项以分别允许或禁止URL和电子邮件。过去直到现在,当我在不允许的URL和允许的电子邮件中使用它时,它的运行情况都很好。问题是我用来阻止URL的正则表达式也阻止了电子邮件地址上的域。如何阻止URL和域,但前提是它们不属于电子邮件地址?


我现有的代码;


// email address removal

if ( ! ISSET($options['email']) || $options['email'] === FALSE) {

    $pattern = "/[^@\s]*@[^@\s]*\.[^@\s]*/";

    $replacement = '<span class="muted">*</span>';

    $string = preg_replace($pattern, $replacement, $string);

}

// url - link removal

if ( ! ISSET($options['url']) || $options['url'] === FALSE) {

    $pattern = "/[a-zA-Z]*[:\/\/]*[A-Za-z0-9\-_]+\.+[A-Za-z0-9\.\/%&=\?\-_]+/i";

    $replacement = '<span class="muted">**</span>';

    $string = preg_replace($pattern, $replacement, $string);

}


呼如林
浏览 197回答 2
2回答

慕沐林林

您可以做的是使用否定环视断言来验证左侧(?<!\S)和右侧的(?!\S)内容不是非空格字符。您的模式的稍微更新的版本可能是:(?<!\S)[a-zA-Z]*[:/]*[\w-]+\.+[\w:./%&=?-]+(?!\S)正则表达式演示请注意,您不必如果使用其他逃跑的斜杠分隔符不是/像~,连字符-可以被移动到开始或字符类的不逃脱它的结束及该点.没有在转义角色类。
随时随地看视频慕课网APP
我要回答