加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

regex – 如何清理字符串以用作PERL中的文件名?

发布时间:2020-12-15 21:48:42 所属栏目:大数据 来源:网络整理
导读:我有一份工作申请表,人们填写他们的姓名和联系方式并附上简历. 通过电子邮件发送联系信息并附上简历. 我想将文件的名称更改为竞争编号和名称的组合. 如何清理生成的文件名,以便我可以保证其中没有无效字符.到目前为止,我可以删除所有空格和小写字符串. 我想
我有一份工作申请表,人们填写他们的姓名和联系方式并附上简历.

通过电子邮件发送联系信息并附上简历.

我想将文件的名称更改为竞争编号和名称的组合.

如何清理生成的文件名,以便我可以保证其中没有无效字符.到目前为止,我可以删除所有空格和小写字符串.

我想删除任何标点符号(如撇号)和非字母字符(如重音符号).

例如,如果“AndréO’Hara”使用此表单提交了他的简历作业555,如果删除所有可疑字符并且我最终得到的文件名如下,我会很高兴:

555-andr-ohara-resume.doc

我可以用什么正则表达式删除所有非字母字符?

这是我到目前为止的代码:

# 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',};

解决方法

如果您尝试“白名单”字符,您的基本方法应该是使用字符类补充:

[…]在Perl正则表达式中定义一个字符类,它将匹配内部定义的任何字符(包括诸如a-z之类的范围).如果添加^,它将成为补码,因此它匹配括号内未定义的任何字符.

$hr_generated_filename =~ s/[^A-Za-z0-9-.]//g;

这将删除任何不是未加音的拉丁字母,数字,短划线或点.要添加到白名单,只需在[^ …]中添加字符即可.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读