目的の値が正しいか調査することができるfilter_input関数について理解を試みてみた

はじめに

初心者がPHPの勉強をしたのでアウトプットしていく。
とにかく最速でアプリを作るための勉強なので、作りたいものに特化したアウトプットになる。
今回は目的の値が正しいか調査することができるfilter_input関数について。

filter_input関数とは

指定した名前の変数を外部から受け取り、オプションでそれをフィルタリングする。
現場ではユーザが入力した値が正しいものかを調査する時などに使われている。

基本構文

filter_input(input_type, variable, filter, options)

構文は暗記するか、検索する。

実際に使ってみる

<!-- form,php -->
<form action="./result.php" method="POST">
<dl>
 <dt>パスワードを入力してください。</dt>
 <dt><input type="password" name="pass"></dt>
 </dl>
</form>


<!-- result.php -->
<?php
$pass = filter_input(INPUT_POST, 'pass');
// 半角英数字8文字以上100文字以下の正規表現
if(!preg_match("/\A[a-z\d]{8,100}+\z/i",$pass)) {
 echo 'パスワードは英数字8文字以上100文字以下にしてください。';
} else {
 echo '登録完了しました。';
}
?>

入力欄に「英数字8文字以上100文字以下」のパスワードを入力しエンターを押すと、「登録完了しました。」が表示され、それ以外は「パスワードは英数字8文字以上100文字以下にしてください。」というエラーメッセージが表示される。

分解してみる

$pass = filter_input(INPUT_POST, 'pass');

passPOSTされた場合、passが空ならnullを返し、値が入っている場合は$passに格納する。

if(!preg_match("/\A[a-z\d]{8,100}+\z/i",$pass)) {処理①} else {処理②}


preg_matchは正規表現によるマッチングを行う関数で、/\A[a-z\d]{8,100}+\z/iは半角英数字8文字以上100文字以下の正規表現。
つまり、正規表現に一致しない場合は「処理①」を行い、それ以外は「処理②」を行うというもの。