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

时间:2019-04-14 17:34:30

标签: php regex

我有一种方法可以用来清除用户提交的数据的输出。我可以传递选项以分别允许或禁止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);
}

2 个答案:

答案 0 :(得分:1)

如果您使用的是PHP,则验证字符串是否为电子邮件地址的一种好方法是 <div class="col-md-3" ng-repeat="(key, group) in vm.analyticsData"> {{group | json}} <h1>{{ key }}</h1> <div class="charts-container"> <div class="chart-block"> <bar-graph data="group"></bar-graph> </div> </div> </div> (请参阅PHP filter_var。此函数将返回过滤后的值;如果返回,则返回filter_var()过滤器失败(没有有效的电子邮件地址)。

FALSE

还有更多可用的过滤器:https://www.php.net/manual/en/filter.filters.php

如果要使用正则表达式验证电子邮件地址,可以查看以下示例:https://regex101.com/r/aG8fB6/2 他们正在使用此正则表达式来验证电子邮件地址:

$filtered = filter_var($email_string, FILTER_VALIDATE_EMAIL);
if(!empty($filtered )) {
  // valid email address
} else {
  // not a valid email address
}

在PHP中,您可以使用[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z]+ 根据正则表达式(PHP preg_match)检查字符串。

答案 1 :(得分:0)

您可以做的是使用否定的lookaround断言来验证左侧(?<!\S)上的内容和右侧(?!\S)上的内容不是非空格字符。 / p>

您的图案的稍微更新的版本可能是:

(?<!\S)[a-zA-Z]*[:/]*[\w-]+\.+[\w:./%&=?-]+(?!\S)

Regex demo

请注意,如果您使用/以外的~而不是-,则不必转义正斜杠,连字符.可以移到开头或字符类的末尾可以不对其进行转义,而在字符类中不必对点driver.actions({bridge:true}).dragAndDrop(source,destination).build().perform(); 进行转义。