Как очистить строку для использования в качестве имени файла в PERL?

У меня есть форма заявления о приеме на работу, в которой люди заполняют свое имя и контактную информацию и прикрепляют резюме.

Контактная информация отправляется по электронной почте, а резюме прилагается.

Я хотел бы изменить имя файла так, чтобы оно представляло собой комбинацию номера соревнования и их имени.

Как мне очистить сгенерированное имя файла, чтобы гарантировать, что в нем нет недопустимых символов? До сих пор я могу удалить все пробелы и нижнюю строчку строки.

Я хотел бы удалить любые знаки препинания (например, апострофы) и не алфавитные символы (например, ударения).

Например, если «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',
 };
8
задан jeph perro 18 August 2010 в 19:11
поделиться

1 ответ

Если вы пытаетесь внести символы в «белый список», ваш основной подход должен заключаться в использовании дополнения к классу символов:

[...] определяет класс символов в регулярных выражениях Perl, который будет соответствовать любым символам, определенным внутри (включая такие диапазоны, как a-z ). Если вы добавляете ^ , он становится дополнением, поэтому он соответствует любым символам , но не , определенным в скобках.

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

Это удалит все, кроме латинской буквы без ударения, числа, тире или точки. Чтобы добавить в белый список, просто добавьте символы внутри [^ ...] .

13
ответ дан 5 December 2019 в 12:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: