Perl:文字列前後のスペース&タブを削除

運営している俳句サイトで自動句会システムを作動させている。

ユーザーが自分が詠んだ俳句をテキストフォームを使って投稿するという仕組みなのですが、キーボードからの入力ではなくて、コピー貼付け操作をされる方も多く、意図しないスペースが入ったまま投稿されるケースが多いです。そのままですとシステムが正常に処理できないことがあるので、投稿受付時に不要なスペースやタブを自動的に削除するように対策を施すことにしました。

文字列前後の半角スペース&タブを削除

正規表現を使って文字列$valの末尾の半角スペース&タブを削除するスクリプトは以下の通り。

$val =~ s/\s*(.*?)\s*$/$1/;

テストスクリプトで確認してみましょう。

## 文字列前後のスペース&タブ削除
$val = "This is a pen.     ";
$val =~ s/\s*(.*?)\s*$/$1/;
print $val;

文字列前後の全角スペースを削除

全角スペースの削除は、少しやっかいです。使用する文字コードによって異なるからです。

$val =~ s/\x81\x40//g;  SJIS
$val =~ s/\xa1\xa1//g;  EUC
$val =~ s/\xE3\x80\x80//g;  utf-8