[MT]値に日本語が含まれるかどうか判別して条件分岐する

記事のタイトルが斜体になっているデザインを実装する際、試行錯誤してみた話。

日本語が斜体になると激しく読みにくいので、日本語が含まれている場合は通常の字体で表示したい。そこで慣れない正規表現を使って頑張ってみました。

日本語が斜体になるとどうなるか # ←読みにくい

日本語が斜体になるとどうなるか # ←こっちのが当然読みやすい

<$mt:EntryTitle setvar="entry_title"$>
<mt:If test="$entry_title =~ /[^\w\s\-\&\;\:\@\|\\\/\=\(\)\'\%\$\#\!\[\]\{\}\`\*\+\?\<\>]+/">
<$mt:Var name="entry_title"$>
<mt:Else><i><$mt:Var name="entry_title"$></i>
</mt:If>

日本語自体を正規表現ではマッチさせることができないので、あらゆるアスキー文字の否定(ある文字以外の文字)という形でマッチさせてみました。マッチすると通常のMTタグが出力され、マッチしないと<i>で囲まれたMTタグが出力されます。
しかし、我ながら稚拙な書き方だと思いますし、これで例外なく正しくマッチできているのかは自信がありません。。。きっともっとスマートなやり方はあるはずです。

ちなみにtestモディファイアは中にPerlの式を書くことができるモディファイアです。
<mt:If>に仕込んでBool値が返るPerl式を記述しておけば、TRUEが返ったときに中身を実行させることができます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>