• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHP 全角・半角・英数字 エラー判定)

PHP 全角・半角・英数字 エラー判定

このQ&Aのポイント
  • PHPを独学で勉強しているものです、あるサイトを構築中で、入力内容のエラー判定をしたいのですが、どうしても半角英字がエラーではじかれず、どなたかご指導いただけますでしょうか。
  • PHPのバージョンは5.2で、DBはMySQLでユーザーがある情報を登録できるサイトで、データ型にあわせるため、1以上の半角数字のみ受け付けるようにしたいです。
  • 入力欄は3か所で、$ic0、$ic1、$ic2に格納されています。入力が全角数字の場合はそれぞれを半角数字に自動変換したいとおもっています。

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.2

まず1点。Shift_JISをやめてUTF-8(BOM無し推奨)にしましょう。 【UTF-8を使うメリット】 ・UTF-8には接頭符号が用いられているので、マルチバイト非対応の関数でもマルチバイト文字列をそのまま扱うことが出来ます http://www.softel.co.jp/blogs/tech/archives/525 ・preg_match関数での文字クラスに関して、UTF-8であればu修飾子を使うだけで「バイト単位」ではなく「文字単位」で扱うことが出来ます。 【1以上を表す半角数字のみかどうか判定するif文】 今回は正規表現を使うまでも無いです。 http://php.net/manual/ja/function.ctype-digit.php $str = mb_convert_kana($str, 'n', 'UTF-8'); if (!ctype_digit($str) || !$str) { echo "1以上の数字で入力してください。"; } else { echo "OK"; } なお、ctype_digit関数のシグネチャをマニュアルで見ると第1引数$textは文字列でなければならないと書かれていますが、他の一般的な関数とは異なり、例外的にctype_***関数は文字列以外(配列など)を渡したときにもエラーを一切出さずにそのままFALSEを返してくれます。

buttero
質問者

お礼

ご親切に解説いただいたおかげさまでで解決できました。 ありがとうございます。ctype_digitは知識として得る事ができましたが、いまのところ、|| !$str の部分の意味がまだ理解できていないので、調べてみたいと思います。 いままで全てShift_JISでやってきましたので、UTF-8にかえるのは単純にプログラム内だけ置換すればよいのか、MySQLでつくったDBやPHPの環境まで全て統一しなくてはならないのかわかりませんが、それは別で質問することにいたします。(調べてから)

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

文字列の比較に==演算子(半角イコール2つ)を使うのは論外 ほんとに"0"と比較するなら===(半角イコール3つ)を使うこと また数字以外をはじくのであれば数字のチェックだけすれば十分 preg_match("/^[a-zA-Z]+$/",$ic_check) のような処理は不要(a-z以外の全ての文字がエラーになるべきなので)

buttero
質問者

お礼

文字列の比較に==演算子(半角イコール2つ)はなぜいけないのでしょうか?プログラミングの学校でもらったテキストにはif文の練習で、 if( $weather=="雨") { echo "家の掃除をする"; } とか書いてあり、そのまま覚えて今に至ります。 また、===と3つ使うケースがあることもはじめて知りましたので勉強してみたいと思います。 教えていただき、ありがとうございます。