Loading

[PHP] 入力フォームのバリデーションチェックを実装する

PHPで入力フォームにバリデーションチェックをかける

入力フォームにバリデーションチェックを掛けることは、システムでデータ不整合を発生させないためには非常に重要です。今回は、バリデーションチェックをPHPで実装しましたので、紹介致します。(ユーザビリティ的にはjavascriptでの実装が理想ですが、javascriptはブラウザで無効化できるため、最終的にはサーバサイドでのチェックも必要です)

[PHP] 入力フォームのバリデーションチェックを実装する

1. バリデーションチェック~null,空白~

必須項目の入力時に利用する、空白かどうかを確認するバリデーションチェックです。

/**
 * nullチェック
 *
 * @param String $str チェック文字列
 * @return boolean true:エラー無し false:validationエラーあり
 */
function isNull($str) {
    if ($str == null || strcmp($str, "") == 0 ) {
        # 文字列が空白の場合、false
        return false;
    }	
    return true;
}

2. バリデーションチェック~半角英数のみ~

プラットフォームによくあるグループID等、日本語を禁止したい場合に利用できるバリデーションチェックです。

/**
 * 半角英数のみ
 *
 * @param String $str チェック文字列
 * @return boolean true:エラー無し false:validationエラーあり
 */
function isAlphaNumeric($str, $maxLength = null, $minLength = null) {
    if (!preg_match("/^[a-zA-Z0-9]+$/", $str)) {
        # 半角英数以外が含まれていた場合、false
        return false;
    }
    return true;
}

3. バリデーションチェック~半角数字のみ~

電話番号等、半角数字以外の入力を禁止したい場合に利用できるバリデーションチェックです。

/**
 * 半角数字のみ
 *
 * @param String $str チェック文字列
 * @return boolean true:エラー無し false:validationエラーあり
 */
function isNumeric($str) {
    if (!preg_match("/^[0-9]+$/", $str)) {
        # 半角数字以外が含まれていた場合、false
        return false;
    }
    return true;
}

4. バリデーションチェック~半角英字のみ~

名前の英字読み等、半角英字のみかどうかをチェックしたい場合に利用できるバリデーションチェックです。

/**
 * 半角英字のみ
 *
 * @param String $str チェック文字列
 * @return boolean true:エラー無し false:validationエラーあり
 */
function isAlphaNumeric($str, $maxLength = null, $minLength = null) {
    if (!preg_match("/^[a-zA-Z]+$/", $str)) {
        # 半角英字以外が含まれていた場合、false
        return false;
    }
    return true;
}

5. バリデーションチェック~ひらがなのみ~

氏名のふりがな欄等、ひらがなのみかどうかを確認したい場合に利用できるバリデーションチェックです。

/**
 * ひらがなのみ
 *
 * @param String $str チェック文字列
 * @return boolean true:エラー無し false:validationエラーあり
 */
function isHiragana($str, $maxLength = null, $minLength = null) {        
    if (!preg_match("/^[ぁ-ん]+*$/u", $str)) {
        # ひらがな以外が含まれていた場合、false
        return false;
    }
    return true;
}

6. バリデーションチェック~カタカナのみ~

氏名カナ欄等、カタカナのみかどうかを確認する場合に利用できるバリデーションチェックです。

/**
 * カタカナのみ
 *
 * @param String $str チェック文字列
 * @return boolean true:エラー無し false:validationエラーあり
 */
function isKatakana($str, $maxLength = null, $minLength = null) {
    if (!preg_match("/^[ァ-ン]+*$/u", $str)) {
        # カタカナ以外が含まれていた場合、false
        return false;
    }
    return true;
}

7. バリデーションチェック~全角のみ~

よく住所の入力欄に利用されていますが、全角のみかどうかを確認したい場合に利用できるバリデーションチェックです。半角を嫌う理由は、半角は攻撃に使えるような文字が含まれるためです。

/**
 * 全角のみ
 *
 * @param String $str チェック文字列
 * @return boolean true:エラー無し false:validationエラーあり
 */
function isMultiByteChar($str, $maxLength = null, $minLength = null) {
    if (strlen($str) == mb_strlen($str,'UTF-8')) {
        # 全角以外が含まれていた場合、false
        return false;
    }
    return true;
}

8. バリデーションチェック~半角~

先ほどのコードと逆で、半角のみかどうかを確認したい場合に利用できるバリデーションチェックです。

/**
 * 半角のみ
 *
 * @param String $str チェック文字列
 * @return boolean true:エラー無し false:validationエラーあり
 */
function isSingleByteChar($str, $maxLength = null, $minLength = null) {
    if (strlen($str) != mb_strlen($str,'UTF-8')) {
        # 半角以外が含まれていた場合、false
        return false;
    }
    return true;
}

9. バリデーションチェック~半角英数+記号~

英語表記の住所等、入力内容が半角英数と記号のみかどうかを確認したい場合に利用できるバリデーションチェックです。

/**
 * 半角英数+記号
 *
 * @param String $str チェック文字列
 * @return boolean true:エラー無し false:validationエラーあり
 */
function isAlphaNumericAndSign($str, $maxLength = null, $minLength = null) {
    if (!preg_match("/^[a-zA-Z0-9!-/:-@¥[-`{-~]+$/", $str))) {
        # 半角英数+記号以外が含まれていた場合、false
        return false;
    }
    return true;
}

10. バリデーションチェック~電話番号~

入力内容が、電話番号形式かどうかを確認する場合に利用できるバリデーションチェックです。下記にパターンでチェックをかけています。

ハイフン無しの6~9桁
またはハイフンありの13桁以下

/**
 * 電話番号(ハイフン無しの6~9桁、またはハイフンありの13桁以下)
 *
 * @param String $str チェック文字列
 * @return boolean true:エラー無し false:validationエラーあり
 */
function isPhoneNumber($str) {
    if (!preg_match("/^[0-9-]{6,9}$|^[0-9-]{13}$/", $str)) {
        # 電話番号以外の形式の場合、falseを返す
        return false;
    }
    return true;
}

11. バリデーションチェック~携帯電話~

入力内容が携帯電話形式か否かを確認する場合に利用できるバリデーションチェックです。電話番号と違い電話番号の桁数が決まっているので、より厳しくチェックをかけています。

/**
 * 携帯電話番号(「XXX-XXXX-XXXX」または「XXXXXXXXXXX(11桁)」)
 *
 * @param String $str チェック文字列
 * @return boolean true:エラー無し false:validationエラーあり
 */
function isCellPhoneNumber($str) {
    if (!preg_match("/^[0-9]{3}-[0-9]{4}-[0-9]{4}$|^[0-9]{11}$/", $str)) {
        # 携帯電話番号以外の形式の場合、falseを返す
        return false;
    }
    return true;
}

12. バリデーションチェック~郵便番号~

入力内容が郵便番号形式か否かを確認する場合に利用できるバリデーションチェックです。

/**
 * 郵便番号(「XXX-XXXX」)
 *
 * @param String $str チェック文字列
 * @return boolean true:エラー無し false:validationエラーあり
 */
function isPostCode($str) {
    if (!preg_match("/^[0-9]{3}-[0-9]{4}$/", $str)) {
        # 郵便番号以外の形式の場合、falseを返す
        return false;
    }
    return true;
}

13. バリデーションチェック~メールアドレス~

入力内容がメールアドレス形式か否かを確認する場合に利用できるバリデーションチェックです。

/**
 * メールアドレス
 *
 * @param String $str チェック文字列
 * @return boolean true:エラー無し false:validationエラーあり
 */
function isMailAddress($str) {
    # First, we check that there's one @ symbol, and that the lengths are right
    if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $str)) {
        # Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
        return false;
    }
    # Split it into sections to make life easier
    $str_array = explode("@", $str);
    $local_array = explode(".", $str_array[0]);
    for ($i = 0; $i < sizeof($local_array); $i++) {
        if (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i])) {
            return false;
        }
    }
    if (!ereg("^\[?[0-9\.]+\]?$", $str_array[1])) {
        # Check if domain is IP. If not, it should be valid domain name
        $domain_array = explode(".", $str_array[1]);
        if (sizeof($domain_array) < 2) {
            # Not enough parts to domain
            return false;
        }
        for ($i = 0; $i < sizeof($domain_array); $i++) {
            if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i])) {
                return false;
            }
        }
    }
    return true;
}

14. バリデーションチェック~URL~

入力内容がURL形式か否かを判断する場合に利用できるバリデーションチェックです。

/**
 * URL
 *
 * @param String $str チェック文字列
 * @return boolean true:エラー無し false:validationエラーあり
 */
function isUrl($str) {
    if (!preg_match('/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/', $str)) {
        # URL以外の形式の場合、false
        return false;
    }
    return true;
}

15. バリデーションチェック~ファイル名~

ファイル名に入力できない文字があるため、ファイル名入力欄に、入力NGの値が有るか否かをチェックする場合に利用できるバリデーションチェックです。

/**
 * ファイル名 (「¥, /, :, *, ?, ", <, >, |」以外)
 *
 * @param String $str チェック文字列
 * @return boolean true:エラー無し false:validationエラーあり
 */
function isFile($str) {
    if (preg_match('/^.*[(\\|/|:|\*|?|\"|<|>|\|)].*$/', $str)) {
        # URL以外の形式の場合、false
        return false;
    }
    return true;
}

16. バリデーションチェック~日付~

入力内容が日付形式か否かをチェックする場合に利用できるバリデーションチェックです。有効日付かどうかのチェックも入れています。

/**
 * 日付(YYYY/MM/DD形式)
 *
 * @param String $str チェック文字列
 * @return boolean true:エラー無し false:validationエラーあり
 */
function isDate($str) {
    if (!preg_match("|^\d{4}\/\d{2}\/\d{2}$|", $str)) {
        # 日付以外の形式の場合、false
        return false;
    }
    if(!checkdate( substr($str, 5, 2 ), substr($str, 8, 2 ), substr($str, 0, 4 ))){
        # 日付以外の場合、false
        return false;
    }
    
    return true;
}

PHP関連記事

PHPのその他記事もまとめてますので、是非お立ち寄りください(。・ω・。)

ふぇにば|PhoEniBiR

投稿者プロフィール

わくわくしてて偉い系VTuver ふぇにば です。
少しでもお役に立てておりましたら嬉しいです(。・ω・。)

関連記事

  1. 『Excel VBA』マクロで月の日数を取得する(当月・前月・翌月)

    2016.08.02
  2. [PHP] igo-phpを用いた形態素解析〜タグクラウド自作に向けて〜

    2016.05.05
  3. [PHP] ソーシャルボタン自作!PHPでSNSのカウント数を取得する(Face…

    2017.11.25
  4. [Excel] 効率を大幅に上げる便利な関数使い方一覧

    2017.01.06
  5. [CSS] CSSだけで手軽にコピー禁止する方法!

    2017.10.11
  6. [jQuery] jQueryでツールチップを自作する方法

    2020.05.17

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


New Article

  1. ChatGPT × StableDiffusion
  2. ChatGPT VS コンサルタント
  3. 注目したい5つのテクノロジートレンド2023
PAGE TOP