入力されたユーザーIDをチェックする(PHP+PEARでウェブサービス勉強記録・4)

前回は、ユーザー情報の登録に当たって、最低限のチェックと登録まで、を実装しました。

今回は、入力されたユーザーIDのチェックを行います。

ユーザーIDの条件定義

まず、登録ユーザーIDの仕様を以下のように定義しました。

  1. ユーザーIDは必須
  2. 登録済みのユーザーIDは再登録できない(重複チェック)
  3. ユーザーIDは半角英数字のみで構成される
  4. 最低4文字以上ないとNG。(3文字以下のIDを許可しない)上限32文字まで。

上記に従って、ベリファイ用のルーチンを考えました。

1,2は前回実装済みなので、今回は3・4の処理について考えます。

半角英数字以外の文字列を認めない

前回のユーザーIDチェックルーチンは以下のようなものでした。

/* 入力されたIDが空か、もしくは適切でないかをチェック */
   

      if(empty($username)) {
    
      $regist_error = "IDは必須です。<br />";
    
    } elseif (!empty($user_exist)) {

    $regist_error .= "IDに入力した ".$username."はすでに使用されています。<br />";

    }

上記の$usernameに、チェック用のロジックを追加していきます。

まずは半角英数字かどうかのチェックですが、正規表現でパターンマッチを行うことにしました。

elseif (!preg_match("/^[a-zA-Z0-9]+$/", $username)) { $regist_error .= "IDには半角英数字のみ使用してください。<br />"; }

次に、文字数が4文字以上、32文字以下のチェックです。関数mb_strlenで文字列数を取得し、長短を調べるようにしてみました。

/* 入力されたIDの長さが4文字以上、32文字以下かどうかをチェック*/

      if(mb_strlen($username) < 4) {
      
    $regist_error .= "IDは3文字以上で設定してください<br />";
    
    } elseif (mb_strlen($username) > 32) {
    
    $regist_error .= "IDが長すぎます。32文字以下で設定してください<br />";

    }

以上の条件を、前回のロジックに付け足します。

registCheck.php(一部)

/* エラーメッセージ用変数 $regist_error 初期化 */

    unset($regist_error);

/* データ登録モードの場合、処理に入る */

if ($_POST["mode"] == check ) {

/* 入力されたIDが空か、もしくは適切でないかをチェック */
   

      if(empty($username)) {
    
      $regist_error = "IDは必須です。<br />";
    
    } elseif (!empty($user_exist)) {

    $regist_error .= "IDに入力した ".$username."はすでに使用されています。<br />";

    } elseif (!preg_match("/^[a-zA-Z0-9]+$/", $username)) {

    $regist_error .= "IDには半角英数字のみ使用してください。<br />";

    } 

/* 入力されたIDの長さが4文字以上、32文字以下かどうかをチェック*/

      if(mb_strlen($username) < 4) {
      
    $regist_error .= "IDは4文字以上で設定してください<br />";
    
    } elseif (mb_strlen($username) > 32) {
    
    $regist_error .= "IDが長すぎます。32文字以下で設定してください<br />";

    }
    
/* 入力されたメールアドレスが空か、もしくは適切でないかをチェック */


        if(empty($email)) {
    
        $regist_error .= "emailは必須です。<br />";

    }   elseif (!empty($email_exist)) {
    
    $regist_error .= "メールアドレスに入力した ".$email."はすでに使用されています。<br />";

    }
}

IDにひらがなを使った場合

id_error_hiragana

IDに全角英数字を使った場合

id_error_zenkaku

IDが3文字だった場合

id_error_lesswords

IDに32文字以上だった場合

id_error_toolong

 

次回はメールアドレスとパスワードの入力チェック

次回は、メールアドレスとパスワードの入力チェックを考えてみたいと思います。

 

今回の疑問

エラーチェックを直線的にif、elseifで処理して、変数に文字列を追加していっているけど、もう少しスマートな方法はないだろうか