• ベストアンサー

全角数値の判定

教えて頂けますか? フォームからPOSTされた文字列が半角数値、または文字列の場合許可し、全角数値の場合拒否したいのですが 全角数値が is_numeric で数値として認識しない為 うまくいきません。 他に良い方法がありますか? よろしくおねがいします。 if ( strlen($_POST['test']) != mb_strlen($_POST['test'],'UTF-8') && is_numeric($_POST['test']) == TRUE ){ echo '半角で入力してください。<br />'; }

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

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

mb_ereg_matchが使えそうだけど、文字コードの指定が 面倒だなっと・・・ というわけで代替案 if( $_POST['test'] != mb_convert_kana($_POST['test'],"n","UTF-8" ){ echo '半角で入力してください。<br />"; } とかどうでしょ? mb_convert_kanaで、全角数値を半角数値に変換し 元の文と比較して違えば、元の文に全角数値が含まれていた事になる という考え方です。

psychesine
質問者

お礼

ありがとうございます うまくいきました

その他の回答 (3)

回答No.4

最善の方法ではないかもしれませんが、 過去に似たような処理を行ったときの手順を。 function test($exp) {  //評価対象文字列を半角に変換したものを用意する。  $exp2 = mb_convert_kana($val, 'ASKV');  //半角数値であればtrueを返す。  if (is_numeric($val)) {   return true;  //半角に変換した結果数値になるのであれば、  //元の値は全角数値であると判断し、falseを返す。  } else if(is_numeric($exp2)) {   return false;  } } コードは検証していませんがこんな方法でいかがでしょうか?

psychesine
質問者

お礼

ありがとうございます うまくいきました

  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.3

「数値」とは ASCIIの 0-9 であって、「全角数値」というものは存在しない。したがって、式「strlen($_POST['test']) != mb_strlen($_POST['test'],'UTF-8')&& is_numeric($_POST['test']) == TRUE」は成立しない、です。 「is_numeric($_POST['test']) == TRUE」を「preg_match("/\xEF\xBC[\x90-\x99]/",$test)」にでもして、エラーメッセージは「数字は半角で入力してください。」としたらどうかな。 PHPはよく知らないので役にはたてんかも。。。

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

>全角数値の場合拒否したいのですが >全角数値が is_numeric で数値として認識しない為 全角数値を拒否するんですから、is_numetricで数値として 認識する必要はないんじゃないの?

psychesine
質問者

お礼

全角文字列は許可したいのです。 もしたしたら全角数値がis_numetricでTRUEを返すかな? と思ったのですがFALSEでしたので、他に方法がないか教えて頂きたく 質問しました。 全角内容固定文字列->許可 半角数値->許可 全角数値->拒否