【PHP初学者向け】正規表現を使用せずに簡単にバリデーションを設定する方法を紹介します

正規表現を使用するのは面倒だな〜

こんなこと思ったことないですか?

PHPには、簡単にバリデーションを設定できる関数が用意されています。

もちろん、正規表現を使用した方が、より強固なアプリケーションになります。

が、ミニアプリなどで簡単なバリデーションを設定したい時もあるはずです。

今回はそんな時に役立つ関数を紹介します。

正規表現にあまり馴れていない人は重宝しちゃうかもですね。

versions
  • PHP 8.0.0

filter_var関数を使用しよう

早速ですが、PHPのリファレンスを見て使用方法を確認していきましょう。

filter_var ( mixed $value , int $filter = FILTER_DEFAULT , array|int $options = 0 ) : mixed

わかりづらいかもしれませんので、少し解説です。

  • 第1引数は、どんな型でも大丈夫だということを示しています
  • 第2引数は、デフォルトの変数を使用できることを示しています
  • 第3引数は、オプションの設定を示しています

詳しくは最後の参考にリファレンスを載せておくので確認してください。

また、filter_varの返り値は以下のように記載があります。

フィルタリングされたデータ、あるいは処理に失敗した場合に false を返します。

PHPリファレンス(filter_var)

この返り値は、後の条件分岐で重要になるので覚えておきましょう。

emailのバリデーションを使用する

filter_var関数には、たくさんのデフォルトバリデーションが用意されているのですが、今回はわかりやすく「email」を使用します。

任意のディレクトリに2つのファイルを作成し、以下を記述します。

<?php
require('validation.php');

if (!empty($_POST)) {
  $errors = validation($_POST);
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <form action="" method="POST">
    <label for="name">名前を入力してください</label>
    <p>
      <input type="text" name="name" id="name">
    </p>
    <p>
      <input type="text" name="email" id="email">
      <?php if (!empty($errors['email'])): ?>
        <p><?php echo $errors["email"]?></p>
      <?php endif; ?>
    </p>
    <label for="name">自己紹介を入力してください</label>
    <p>
      <textarea name="profile" id="profile" cols="30" rows="10"></textarea>
    </p>
    <button type="submit">登録する</button>
  </form>
</body>
</html>
<?php

function validation($request) {

  $errors = [];
  if (empty($request['email']) || !filter_var($request['email'], FILTER_VALIDATE_EMAIL)) {
    $errors['email'] = 'emailは必須です。または不正な値です';
  }

  return $errors;
}
?>

バリデーションは今後も追加することを見越して、関数として切り出しておくと良いですね。

!filter_var($request['email'], FILTER_VALIDATE_EMAIL)

使用方法は、

  • 第1引数に、どの文字列を検証するのか
  • 第2引数に、FILTER_VALIDATE_EMAILと呼ばれる変数
  • 返り値がfalseになるので、先頭に「!」をつけて真偽値を反転させる

特に重要なのが、3つ目です。

先ほど返り値がfalseになる話しをしました。

if文は、trueが返ってこないと実行しないため、真偽値を反転させています。

if文に関しては、【基本の「き」】PHPのif文をマスターしてプログラミングの表現力を磨こうでも紹介しています。

少し補足ですが、HTMLにはinputタグにtype=”email”が用意されています。

そのため、HTML側でもバリデーションをかけることができます。

今回は練習なので、type=”text”にしています。

まとめ

  • PHPには簡単にバリデーションが組めるように用意された関数がある
  • filter_var関数を使用する
  • filter_varの返り値はfalseである

冒頭でも言いましたが、より強固なwebアプリケーションを作成するには、今回紹介したバリデーションだけでは足りないことを忘れないでくださいね。

バリデーションもとても奥が深いので、ぜひいろいろご自身で試してみてください。

参考

データのフィルタリング