PHPの関数について教えてください。PHPは4.3.10です。フォームの入力欄に半角英字や半角数字のみを入力させたい場合、チェックする関数はあるのでしょうか?例えば下記のような場合です。無い場合はチェック出来るようなコードを教えていただけると助かります。

よろしくお願いします。

ローマ字氏名:あいうえお

半角英字のみの入力としたいのでエラー

TEL:あいうえお

半角数字のみの入力としたいのでエラー

回答の条件
  • 1人5回まで
  • 登録:2006/10/03 16:47:09
  • 終了:2006/10/04 16:25:56

ベストアンサー

id:bonlife No.2

回答回数421ベストアンサー獲得回数752006/10/03 18:17:26

ポイント50pt

求めている回答と少しずれてしまうかもしれませんが、PEARを使える環境であるならば、HTML_QuickFormをインストールし、以下のようにすれば簡単にチェックできます。

(本当はフレームワークなどを使ってそちらのValidateにまかせてしまった方が良いのですが。)

<?php
    require_once "HTML/QuickForm.php";

    // フォームの生成
    $form = new HTML_QuickForm('formTest', 'post');

    $form->addElement('header', 'sampleHeader', '簡単なサンプル');

    $form->addElement('text', 'name', 'ローマ字氏名');
    $form->addElement('text', 'tel', '電話番号');
    $form->addElement('reset', 'btnClear', 'クリア');
    $form->addElement('submit', 'btnSubmit', '送信');

    // フィルタの適用
    $form->applyFilter('__ALL__','trim');

    // クライアント側でのJavaScriptチェック
    $form->addRule('name', '名前の入力が必要です。', 'required', '', 'client');
    $form->addRule('tel', '電話番号の入力が必要です。', 'required', '', 'client');

    // サーバ側でのチェック
    $form->addRule('name', '名前の入力が必要です。', 'required');
    $form->addRule('tel', '電話番号の入力が必要です。', 'required');
    // $form->addRule('name','名前は半角英数字のみにしてください。','alphanumeric');
    $form->addRule('name','名前は半角英字のみにしてください。','regex','/^[A-Z-_ ]+$/i');
    $form->addRule('tel','電話番号は数字のみにしてください。','numeric');

    if ($form->validate()) {
        // フォームの検証が成功したら、凍結する。
        $form->freeze();
    }
    $form->display();
?>

フォームの処理などは自分で全てのソースコードを書くよりも、上記のようにPEARを利用した方が簡易で、確実だと思います。

Smartyと連携させれば画面のデザインが簡単になります。(3つ目のURLの連載が参考になります。)

[参考URL]

参考になれば幸いです。

id:moks

丁寧な開設ありがとうございました。大変参考になりました。試してみようと思います。

2006/10/04 16:25:25

その他の回答(1件)

id:mugenkoubou No.1

mugenkoubou回答回数10ベストアンサー獲得回数02006/10/03 17:03:52

ポイント20pt

半角英数字のチェックは

preg_matchを使用して以下のような感じでいけると思います。

if (preg_match('/[^\w]+/', $name)) {

echo 'error';

}

電話番号のチェックはis_numeric関数を使用すれば、

そのままチェックができると思います。

if (!is_numeric($tel)) {

echo 'error';

}

id:moks

回答ありがとうございます。半角英字のチェックで半角スペースを許可したい場合はどのようにすれば良いのでしょうか?

2006/10/04 09:25:43
id:bonlife No.2

回答回数421ベストアンサー獲得回数752006/10/03 18:17:26ここでベストアンサー

ポイント50pt

求めている回答と少しずれてしまうかもしれませんが、PEARを使える環境であるならば、HTML_QuickFormをインストールし、以下のようにすれば簡単にチェックできます。

(本当はフレームワークなどを使ってそちらのValidateにまかせてしまった方が良いのですが。)

<?php
    require_once "HTML/QuickForm.php";

    // フォームの生成
    $form = new HTML_QuickForm('formTest', 'post');

    $form->addElement('header', 'sampleHeader', '簡単なサンプル');

    $form->addElement('text', 'name', 'ローマ字氏名');
    $form->addElement('text', 'tel', '電話番号');
    $form->addElement('reset', 'btnClear', 'クリア');
    $form->addElement('submit', 'btnSubmit', '送信');

    // フィルタの適用
    $form->applyFilter('__ALL__','trim');

    // クライアント側でのJavaScriptチェック
    $form->addRule('name', '名前の入力が必要です。', 'required', '', 'client');
    $form->addRule('tel', '電話番号の入力が必要です。', 'required', '', 'client');

    // サーバ側でのチェック
    $form->addRule('name', '名前の入力が必要です。', 'required');
    $form->addRule('tel', '電話番号の入力が必要です。', 'required');
    // $form->addRule('name','名前は半角英数字のみにしてください。','alphanumeric');
    $form->addRule('name','名前は半角英字のみにしてください。','regex','/^[A-Z-_ ]+$/i');
    $form->addRule('tel','電話番号は数字のみにしてください。','numeric');

    if ($form->validate()) {
        // フォームの検証が成功したら、凍結する。
        $form->freeze();
    }
    $form->display();
?>

フォームの処理などは自分で全てのソースコードを書くよりも、上記のようにPEARを利用した方が簡易で、確実だと思います。

Smartyと連携させれば画面のデザインが簡単になります。(3つ目のURLの連載が参考になります。)

[参考URL]

参考になれば幸いです。

id:moks

丁寧な開設ありがとうございました。大変参考になりました。試してみようと思います。

2006/10/04 16:25:25

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません