Как очистить строку для использования в качестве имени файла в PERL? - PullRequest
8 голосов
/ 18 августа 2010

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

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

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

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

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

Например, если«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',
 };

1 Ответ

12 голосов
/ 18 августа 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...