我有一种方法可以用来清除用户提交的数据的输出。我可以传递选项以分别允许或禁止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);
}
答案 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)
请注意,如果您使用/
以外的~
而不是-
,则不必转义正斜杠,连字符.
可以移到开头或字符类的末尾可以不对其进行转义,而在字符类中不必对点driver.actions({bridge:true}).dragAndDrop(source,destination).build().perform();
进行转义。