@ PHP

form:必須要素を検証する

validate_form() 関数の if() テスト式に、さまざまな条件を設定して、要素を検証することができます。フォーム要素がテストをパスしない場合に、$errors 配列に検証条件に対応したメッセージが追加されるようにします。

必須要素の検証

必須要素がに何かが入っていることを確認するためには、strlen() で要素の長さをチェックします。

form_06.php

<?php
if (isset($_POST['_submit_check'])) {
    if ($form_errors = validate_form()) {
        show_form($form_errors);
    } else {
        process_form();
    }
} else {
    show_form();
}

function process_form()
{
    print 'E-mail が送信されました:' . $_POST['email'] ;
}

function show_form($errors = '')
{
    if ($errors) {
        print 'エラーを修正してください:<ul><li>';
        print implode('</li><li>', $errors);
        print '</li></ul>';
    }
    print <<<_HTML_
<form method="post" action="">
  <p>Email:<input type="text" name="email"></p>
  <p><input type="submit" value="送信する"></p>
  <input type="hidden" name="_submit_check" value="1">
</form>
_HTML_;
}

function validate_form()
{
    $errors = array();
    if (strlen($_POST['email']) == 0) {
        $errors[] = 'email アドレスを入力してください。';
    }
    return $errors;
}

整数チェック

サブミットされた値が整数かを確認するために、変換関数の intval() を使います。$_POST[‘age’] が 41、0、-32 のような整数ならば、intval($_POST[‘age’]) はそれぞれ 41、0、-32 をかえします。しかし $_POST[‘age’] が 55-gogo ならば、intval($_POST[‘age’]) は 55 になり、2 つの値は等しくないので、if() テスト式が成功して、メッセージに $error が付け加えられます。

form_07.php

if ($_POST['age'] != strval(intval($_POST['age']))) {
    $errors[] = '年齢を数値で入力してください。';
}

浮動少数点チェック

floatval() 関数は intval() と同じ働きをしますが、少数点を理解します。$_POST[‘price’] が適切な浮動少数点または整数を含むと floatvar($_POST[‘price’]) は $_POST[‘price’] と等しくなり $error にはなにも付け加えられません。しかし $_POST[‘price’] の中の文字と記号はエラーメッセージの原因となります。

form_08.php

if ($_POST['price'] != strval(floatval($_POST['price']))) {
    $errors[] = '価格を数値で入力してください。';
}

必須要素の検証 – 空白スペースの削除

要素(特に文字列要素)を検証するときに、trim() 関数で文字の前後の空白スペースを削除すると役に立つことがよくあります。空白(ホワイトスペース)だけのエントリーを否定するために必要な strlen() テストと結合することができます。

form_09.php

if (strlen(trim($_POST['name'])) == 0) {
    $errors[] = 'お名前は必ず入力してください。';
}

数の範囲

ある数字が特定の範囲内にあるかどうかをチェックするためには、入力が数字であることを最初に確認します。それから、if() 命令文を使って入力値をテストします。

form_10.php

if ($_POST['age'] != strval(intval($_POST['age']))) {
    $errors[] = "年齢は数値で入力してください。";
} elseif (($_POST['age']<18) || ($_POST['age']>65)) {
    $errors[] = "年齢は18歳以上65歳以下で入力してください。";
}

Eメールアドレス

パターンマッチ関数 preg_match() を用いて、$_POST[‘email’] の値が正規表現の一般的なEメールアドレスのパターン(^[^@s]+@([-a-z0-9]+.)+[a-z]{2,}$)にあてはまるかどうかチェックします。

form_11.php

if (! preg_match('/^[^@s]+@([-a-z0-9]+.)+[a-z]{2,}$/i',$_POST['email'])) {
    $errors[] = 'E-mailアドレスを入力してください。';
}