Contactform7で名前のテキストボックスを英数字禁止にする

投稿者: | 2025年3月26日

あまりContactform7は使ってないんだが、使わざる絵を得ないケースもあったりする。
ただ、スパムが多くて対策がAskimかRecapchaしか勧められてないので、とりあえず傾向から見て名前入力欄に英数字だけしか入れない場合は刎ねる、という仕様を加えてみることに。$target_fieldsにはフィールド名を複数設定する事も可能。


add_filter('wpcf7_validate_text', 'custom_text_validation_filter', 20, 2);
add_filter('wpcf7_validate_text*', 'custom_text_validation_filter', 20, 2);

function custom_text_validation_filter($result, $tag) {
    $name = $tag->name;
    
    // バリデーションを適用するフィールド名を配列で指定
    $target_fields = ['your-name', 'your-name999'];
    
    if (in_array($name, $target_fields)) { // 指定したフィールドの場合に適用
        $value = isset($_POST[$name]) ? trim($_POST[$name]) : '';

        // ひらがな・カタカナ・漢字を1文字以上含むかチェック
        if (!preg_match("/[ぁ-んァ-ヶ一-龠々〆]/u", $value)) {
            $result->invalidate($tag, "英数字のみの入力はできません。ひらがな・カタカナ・漢字を1文字以上含めてください。");
        }
    }
    return $result;
}