会員登録フォームのバリデーション
会員登録フォームのバリデーションの処理を書いていきましょう。バリデーションとは、ユーザーから入力されたデータが正しいものであるかを検証する作業のことをいいます。
送信されたユーザー情報を取得する
送信されたユーザー情報は、パラメーターから取得します。ユーザー情報が入ったパラメーターを取得するにはparamメソッドを使用します。
会員登録フォームからPOSTされた情報を受け取ってみましょう。この処理では、POSTであって、仮登録の処理であるかを、事前に確認しています。
<% # POSTリクエストの処理 if ($self->method eq 'POST') { # 処理方法 my $op = param('op'); $op = '' unless defined $op; # 仮登録の処理 if ($op eq 'register') { # ユーザー情報の取得 # ユーザーID my $code = param('code'); # パスワード my $password = param('password'); # メールアドレス my $mail = param('mail'); } } %>
ユーザーIDのバリデーション
ユーザーIDが正しいものであることを確認しましょう。ユーザーIDが正しいというのは、Mojoliciousスタートアップでは次のように定義します。
- ユーザーIDが指定されていること
- ユーザーIDが、ASCIIコードの英数字とアンダーバーの1文字以上で構成されていること
- ユーザーIDの長さがサービスで利用できるユーザーIDの長さの制限内であること
- ユーザーIDが、存在するユーザーのユーザーIDと重複しないこと
- ユーザーIDが、異なるメールアドレスのユーザー認証待ちのユーザーのユーザーIDと重複しないこと
ユーザーIDは、一意でなければならないので、これをチェックするために、データベースにアクセスする必要があることに注意しましょう。
ユーザーIDのバリデーションを書いていきましょう。正しくない場合は、エラー情報に追加するようにしています。
ユーザーIDが指定されていること
まず最初に、ユーザーIDが空ではないことを確認しましょう。エラーは、$errorsというハッシュのリファレンスに保存しておきます。文字列の長さは、length関数で取得できます。
my $errors = {}; if (length $user_code > 0) { } else { # エラー処理 $errors->{user_code} = 'ユーザーIDを指定してください。'; }
ユーザーIDが、ASCIIコードの英数字とアンダーバーの1文字以上で構成
ユーザーIDが、ASCIIコードの英数字とアンダーバーの1文字(a-zA-Z0-9_)以上で構成されていることをチェックするには、Perlの正規表現を使いましょう。
正規表現は以下の二つのどちらかで表現できます。素直に文字クラスで書くか、PerlのASCIIコードで構成されたワード文字を表現する文字クラスを使います。
# 文字クラスで素直に書く ^[a-zA-Z0-9_]+$ # PerlのASCIIコードで構成されたワード文字を表現する文字クラスを使う ^\p{PosixWord}+$
Perlのコードで書いてみます。
# Perlのワード文字(a-zA-Z0-9_) if ($user_code =~ /^\p{PosixWord}+$/) { } else { # エラー処理 $errors->{user_code} = 'ユーザーIDに利用できる文字は「a-zA-Z0-9_」です。'; }
ユーザーIDの長さがサービスで利用できるユーザーIDの長さの制限内であること
ユーザーIDの長さがサービスで利用できるユーザーIDの長さの制限内であることをチェックしましょう。
グローバルに利用されている、Twitterというサービスでは、ユーザーIDは15文字以内となっています。
Mojoliciousスタートアップでは、これを参考にして、ユーザーIDの長さの制限は、15文字以内にします。文字列の長さは、length関数で取得できます。
# ユーザー名の長さの制限 15文字 if (length $user_code <= 15) { } else { # エラー処理 $errors->{user_code} = 'ユーザーIDに利用できる文字の長さは15文字以内です。'; }
(執筆中)