[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が返ったときに中身を実行させることができます。

Leave a Reply

Your email address will not be published. Required fields are marked *

*
*