formで入力される値をチェックしたい - PHPプロ!Q&A掲示板

413

  • 0P

formで入力される値をチェックしたい

質問日時 / 2007年3月14日 17:02    回答数 / 5件

Questioner:  szkmkt  このエントリーをはてなブックマークに追加 

キーワード / 正規表現    form   

よろしくお願いいたします。
htmlで時間を入力させるための入力フォームを作成し、
PHPにてsubmitしたときに、下記の条件でエラーを出力したいと考えております。
1、フォームが未入力の場合
2、数値以外が入力された場合

1つ目の場合については、下記のif構文でメッセージを出力させるのに成功したのですが、
2つめの場合のif文の作り方がわかりません。
2つめのifの条件式をどのように定義すればよいでしょうか?

  1. //---フォームが未入力の場合-------------------------------------------------------------------
  2. if ( $tswork == "" ) {print "<font color=\"#ff3333\">始業時間を入力してください</font><br>"; }
  3.  
  4. //---フォームが数値以外の場合(ここが分かりません)-------------------------------------------
  5. if ( $tswork ==  ) {   print "<font color=\"#ff3333\">数値で入力してください</font><br>"; }


正規表現を使用すればいいということを伺ったのですが、
詳しく理解できませんでした。どうぞご回答よろしくお願いいたします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01oragokuis_numeric()関数を使えばいいみたいですよ。
┣A02pascal簡単に答えだけ書くと >>CODE if ( !preg_match("/^
┣A03moochomocchoと申します。 入力文字列のチェックには cty
┃┗A03-1szkmktありがとうございます。 大変参考になりました。 正
┗A04edute一応答えとはちょっと外れた、アドバイス的なものにな

回答一覧

並び替え:

A01 参考になった
answereroragoku [3月14日 17:49]

is_numeric()関数を使えばいいみたいですよ。

この意見に回答する

ツリーへ TOPへ

A02
answererpascal [3月14日 17:50]

簡単に答えだけ書くと
  1. if ( !preg_match("/^[0-9]+$/", $tswork) ) {
  2.   print "半角数字以外が入ってます。";
  3. }
という感じでしょうか。


  1. preg_match("/^[0-9]+$/", $tswork)
は数字だけだった場合にTrueを返します。
頭に「!」があるので、TrueはFalseに、FalseはTrueに逆転します。
ということで、数字以外が入っていた場合にifの中の文が実行されます。

全角数字で入力された場合はifの中は実行されないので、全角は半角に変換した方が親切と言えるでしょう。
(どうやればいいかは、まずはご自分で調べてみてください。)

この意見に回答する

ツリーへ TOPへ

A03 参考になった
answerermoocho [3月15日 02:04] (最終編集:3月15日 02:08)

mocchoと申します。

入力文字列のチェックには ctype が有効です。

以下、マニュアルからCtype関数の一覧。
ctype_alnum — 英数字かどうかを調べる
ctype_alpha — 英字かどうかを調べる
ctype_cntrl — 制御文字かどうかを調べる
ctype_digit — 数字かどうかを調べる
ctype_graph — 空白以外の印字可能な文字かどうかを調べる
ctype_lower — 小文字かどうかを調べる
ctype_print — 印字可能な文字かどうかを調べる
ctype_punct — 空白、英数字以外の出力可能な文字かどうかを調べる 
ctype_space — 空白文字かどうか調べる
ctype_upper — 大文字かどうか調べる
ctype_xdigit — 16 進数を表す文字かどうかを調べる 

なので、数値であるか確かめる場合であれば
  1. if (!ctype_digit($value)) {
  2.     print 'error';
  3. }
のような記述になります。

参考:
http://jp.php.net/manual/ja/ref.ctype.php

当然ですが、ctype_digitではマルチバイトの数値文字列
(1234...ではなく、1234...)などはfalseを返すので、
任意で変換が必要になります。

この意見に回答する

ツリーへ TOPへ

A03-1
replyerszkmkt [3月15日 09:56]

ありがとうございます。
大変参考になりました。
正規表現を扱うのは難しいですね。
丁寧に解説しているページ等ご存知でしたら、教えてください。

この意見に回答する

ツリーへ TOPへ

A04
answereredute [3月15日 21:10]

一応答えとはちょっと外れた、アドバイス的なものになってしまいますが

is_numericの「変数が数字または数値文字列である」というのは案外範疇が広く、
少数だったり、負の数であったり、10進数以外であっても
「数字である」と認められてしまう場合もあります。
ctype_digitや正規表現ではじくといいと思います。

数字だけで構成されていたとしても、時間として「不適切な形式」の時分秒が入力された時のエラーチェックもお忘れなく

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)