<mt:SetVarBlock name="registered">@<mt:Comments><$mt:CommentEmail cat="@"$></mt:Comments></mt:SetVarBlock>
<mt:SetVarBlock name="commentemail">@<$mt:CommentEmail cat="@"$></mt:SetVarBlock>
<mt:If name="registered" like="$commentemail">
do something
</mt:If>
登録済みのメールアドレスか否かをチェックするため、上記のようなソースを書きました。普通の半角英数と"@"と"."だけのメールアドレスなら問題ないのですが、メールアドレスに"+"が混ざっているとうまく機能してくれませんでした。
メールに"+"が混ざっている場合と言うのはGmailの「アカウント+任意の文字列@gmail.com」というメールアドレスを想定してのことで、この形式でチェックしたら機能してくれませんでした。
そこで、MovableTypeのregex_replaceを使って"+"を別の文字に置き換えてしまうことを考えました。そこで、修正したソースが以下のものです。
<mt:SetVarBlock name="registered">@<mt:Comments><$mt:CommentEmail cat="@" regex_replace="/+/","@"$></mt:Comments></mt:SetVarBlock>
<mt:SetVarBlock name="commentemail">@<$mt:CommentEmail cat="@" regex_replace="/+/","@"$></mt:SetVarBlock>
<mt:If name="registered" like="$commentemail">
do something
</mt:If>
修正はしたものの改めてチェックしてみると...。うまく行きませんでした。
そもそも、regex_replaceは正規表現というものを使っていて、"+"をただの文字列として扱うにはエスケープしないといけないそうです。
上記のソースをさらに修正したものです。"+"を"\"でエスケープしました。
<mt:SetVarBlock name="registered">@<mt:Comments><$mt:CommentEmail cat="@" regex_replace="/\+/","@"$></mt:Comments></mt:SetVarBlock>
<mt:SetVarBlock name="commentemail">@<$mt:CommentEmail cat="@" regex_replace="/\+/","@"$></mt:SetVarBlock>
<mt:If name="registered" like="$commentemail">
do something
</mt:If>
これでうまく機能して「do something」出来ました。
今回はこの書き方でも問題ないのですが、この書き方では置き換える文字が""(ダブルコーテーション)"や"'(シングルコーテーション)"の場合、問題が出てくるそうです。
この問題を解決するのは「置き換える文字」と「置き換えられる文字」を変数にしてあげれば大丈夫だそうです。修正したソースが以下のものです。
<mt:If name="comment_preview">
<mt:SetVarBlock name="regexvar01">/[+]/g</mt:SetVarBlock>
<mt:SetVarBlock name="regexvar02">@</mt:SetVarBlock>
<mt:SetVarBlock name="registered">@<mt:Comments><$mt:CommentEmail cat="@" regex_replace="$regexvar01","$regexvar02"$></mt:Comments></mt:SetVarBlock>
<mt:SetVarBlock name="commentemail">@<$mt:CommentEmail cat="@" regex_replace="$regexvar01","$regexvar02"$></mt:SetVarBlock>
<mt:If name="registered" like="$commentemail">
do something
</mt:If>
これでメールが登録済みか否かをチェック出来るようになりました。
ただ、ちょっとすっきりしないのが「regexvar01」に設定する変数で置き換えたい文字を[]で囲まないといけないことです。これがないとチェックが機能しませんでした。正規表現も勉強しないとですね。MTを使いこなすなら...。