我有一份工作申请表,人们填写他们的姓名和联系信息并附上简历.
通过电子邮件发送联系信息并附上简历.
我想将文件的名称更改为竞争编号和名称的组合.
如何清理生成的文件名,以便我可以保证其中没有无效字符.到目前为止,我可以删除所有空格和小写字符串.
我想,以消除任何标点符号(如撇号)和非字母字符(如重音).
例如,如果"安德烈·奥哈拉"提交他的简历作业555使用这种形式,我会很高兴,如果所有的可疑人物被拆除,我结束了一个文件名,如:
555-andr-ohara-resume.doc
Run Code Online (Sandbox Code Playgroud)
我可以用什么正则表达式删除所有非字母字符?
到目前为止,这是我的代码:
# Create a cleaned up version of competition number + First Name + Last Name number to name the file
my $hr_generated_filename = $cgi->param("competition") . "-" . $cgi->param("first") . "-" . $cgi->param("last");
# change to all lowercase
$hr_generated_filename = lc( $hr_generated_filename );
# remove all whitespace
$hr_generated_filename =~ s/\s+//g;
push @{ $msg->{attach} }, {
Type => 'application/octet-stream',
Filename => $hr_generated_filename.".$file-extension",
Data => $data,
Disposition => 'attachment',
Encoding => 'base64',
};
Run Code Online (Sandbox Code Playgroud)
Bou*_*rby 13
如果您尝试"白名单"字符,您的基本方法应该是使用字符类补充:
[...]在Perl正则表达式中定义一个字符类,它将匹配内部定义的任何字符(包括诸如范围a-z).如果添加^,它成为一个补充,所以它的任何字符匹配不括号内定义.
$hr_generated_filename =~ s/[^A-Za-z0-9\-\.]//g;
Run Code Online (Sandbox Code Playgroud)
这将删除任何不是未加重音的拉丁字母,数字,短划线或点.要添加到白名单,只需在内容中添加字符即可[^...].