首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PERL中清理用作文件名的字符串?

如何在PERL中清理用作文件名的字符串?
EN

Stack Overflow用户
提问于 2010-08-19 03:06:17
回答 1查看 7.4K关注 0票数 9

我有一份求职申请表,人们填写他们的姓名和联系方式,并附上简历。

联系人信息会通过电子邮件发送,并附上简历。

我想更改文件的名称,使其是竞赛编号和它们的名称的组合。

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

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

例如,如果"AndréO‘’Hara“使用此表单提交了职位555的简历,如果所有有问题的字符都被删除,我将很高兴,我最终得到的文件名如下:

代码语言:javascript
复制
555-andr-ohara-resume.doc

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

到目前为止,我的代码如下:

代码语言:javascript
复制
 # 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',
 };
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-19 03:13:52

如果你正在尝试“白名单”字符,你的基本方法应该是使用一个字符类补码:

Perl在[...]中定义了一个字符类,它将匹配内部定义的任何字符(包括a-z等范围)。如果您添加一个^,它将成为一个补码,因此它将匹配方括号内未定义的任何字符。

代码语言:javascript
复制
$hr_generated_filename =~ s/[^A-Za-z0-9\-\.]//g;

这将删除任何不是无重音的拉丁字母、数字、破折号或点的内容。要添加到您的白名单中,只需在[^...]中添加字符。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3515722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档