Regex用于过滤URL中的电子邮件地址
我需要过滤掉我们的url中任何有电子邮件地址或任何类型的个人信息的垃圾邮件请求 例如:如果有人输入url www.mydomain.com/en us?电子邮件=abc@gmail.com 它应该重定向到 www.mydomain.com/en us?电子邮件= [使用正则表达式匹配电子邮件的模式并将其删除] 基本上,它应该保持url不变并删除emailaddress 另一个例子 重定向 www.mydomain.com/en-us/sompePage/SomeStructure?query=abc.gmail.com 到 www.mydomain.com/en us/sompePage/SomeStructure?查询= 这就是我所尝试的:Regex用于过滤URL中的电子邮件地址,regex,perl,akamai,Regex,Perl,Akamai,我需要过滤掉我们的url中任何有电子邮件地址或任何类型的个人信息的垃圾邮件请求 例如:如果有人输入url www.mydomain.com/en us?电子邮件=abc@gmail.com 它应该重定向到 www.mydomain.com/en us?电子邮件= [使用正则表达式匹配电子邮件的模式并将其删除] 基本上,它应该保持url不变并删除emailaddress 另一个例子 重定向 www.mydomain.com/en-us/sompePage/SomeStructure?query=a
(http | https)://mydomain.com/(^((?!\)[\w-.]*[^.])(@\w+(\.\w+)(\.\w+)[^.\w])$
但是抛出了一个错误
背景故事和推理,如果感兴趣
我们查看了google analytics,发现我们的网站正在使用带有随机查询字符串的随机电子邮件地址。但google将其标记为存储个人信息,因此将其视为违反策略。Sl我们正在尝试在akamai中放置一些正则表达式,以便这些请求不会命中服务器。
(我们还有一个后备javascript来处理相同的问题)您的示例不太擅长解释问题。主要问题是如何识别要删除的“邮件” 我会采取其他方法:
use strict;
use warnings;
use Data::Dumper;
my $debug = 0;
my %url;
while( <DATA> ) {
print if $debug;
chomp;
m|(https{0,1})://([\w\d\.]+)/(.*)\?(.*)|;
@url{qw(proto dn path query)} = ($1,$2,$3,$4);
print Dumper(\%url) if $debug;
# now do whatever your heart desire with $url{query}
$url{query} =~ /(.*=)/;
$url{query} = $1;
print Dumper(\%url) if $debug;
printf "%s://%s/%s/%s\n",
$url{proto}, # protocol
$url{dn}, # domain name
$url{path}, # directory path
$url{query}; # query
}
__DATA__
http://www.example.org/en-us?email=abc@gmail.com
https://www.example.org/en-us/sompePage/SomeStructure?query=abc.gmail.com
使用严格;
使用警告;
使用数据::转储程序;
我的$debug=0;
我的%url;
而(){
如果$debug,则打印;
咀嚼;
(https{0,1}):/([\w\d\.]+)/(.*)?(.*);
@url{qw(proto-dn-path查询)}=($1,$2,$3,$4);
如果$debug,则打印转储程序(\%url);
#现在用$url{query}做你心中想做的事
$url{query}=~/(.*=)/;
$url{query}=$1;
如果$debug,则打印转储程序(\%url);
printf“%s://%s/%s/%s/%s\n”,
$url{proto},#协议
$url{dn},#域名
$url{path},#目录路径
$url{query};#query
}
__资料__
http://www.example.org/en-us?email=abc@gmail.com
https://www.example.org/en-us/sompePage/SomeStructure?query=abc.gmail.com
我再次阅读了您的问题,并意识到akamai可能只允许对正则表达式进行修改,不包括完整的perl脚本
那么您可能需要的是s |=.*.\124;=.
或s/=.*/=
use strict;
use warnings;
while( <DATA> ) {
s|=.*|=|;
print;
}
__DATA__
www.mydomain.com/en-us?email=abc@gmail.com
www.mydomain.com/en-us/sompePage/SomeStructure?query=abc.gmail.com
使用严格;
使用警告;
而(){
s |=*|=|;
印刷品;
}
__资料__
www.mydomain.com/en us?电子邮件=abc@gmail.com
www.mydomain.com/en-us/sompePage/SomeStructure?query=abc.gmail.com
但同样,此方法不会在查询中识别电子邮件。您的问题不完整,无法对问题做出全面判断
您可以尝试
s/[\w\d\-]+@[\w\d\.]+/
作为电子邮件匹配替换正则表达式。的代码包含一个。它比大多数人认为的要复杂得多:-)编辑:
仔细看,我忘了我们已经添加了正则表达式匹配。我们的正则表达式引擎默认为PCRE语法,因此理论上可以在整个查询字符串中进行全面匹配:
提交之前,请在临时平台上进行双重检查和测试。再检查一下正则表达式。这是我自己拿的,没有亲自测试
原件:
通过Akamai,Property Manager工具允许您使用新规则执行此操作。在部署之前,您应该检查文档和测试,或者咨询您的客户团队以了解更具体的问题
在规则中,您需要为查询字符串添加匹配项,如下所示:
在此基础上,添加行为,让Akamai平台实现您想要的功能。如果它是一个简单的重定向,那么您可以使用重定向行为并完全删除查询字符串。大概是这样的:
正如信息框所说,使用Redirector Cloudlet可以更好地处理这个特定用例。但是,一旦匹配了该查询字符串,就可以执行许多操作。不确定混淆的地方是什么。我只想从url中删除电子邮件id。url的其余部分保持不变。我正在试图找到可以在URL中找到电子邮件的正则表达式。您在查询中还有其他参数吗?你打算用它们做什么?请参见上面的
s/[\w\d\.\-]@[\w\d\.\*]/
如果没有提供其他参数,则应删除电子邮件地址。否则,您需要在电子邮件之后提供一些“stop”,这个“stop”可能是&symbol(您需要查看它在查询中的编码方式)。例如,abc.gmail.com
与电子邮件地址不匹配(电子邮件应为user@domain其中用户可以包括字母/数字//-和域字母/数字/-)。请检查以下有关电子邮件地址验证的信息。具体而言,您应该参考电子邮件地址“规范”。对不起,在之前的回复中,请阅读s/[\w\d\.-]+@[\w\d\.]+/