- ベストアンサー
全角数値の判定
教えて頂けますか? フォームからPOSTされた文字列が半角数値、または文字列の場合許可し、全角数値の場合拒否したいのですが 全角数値が is_numeric で数値として認識しない為 うまくいきません。 他に良い方法がありますか? よろしくおねがいします。 if ( strlen($_POST['test']) != mb_strlen($_POST['test'],'UTF-8') && is_numeric($_POST['test']) == TRUE ){ echo '半角で入力してください。<br />'; }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
mb_ereg_matchが使えそうだけど、文字コードの指定が 面倒だなっと・・・ というわけで代替案 if( $_POST['test'] != mb_convert_kana($_POST['test'],"n","UTF-8" ){ echo '半角で入力してください。<br />"; } とかどうでしょ? mb_convert_kanaで、全角数値を半角数値に変換し 元の文と比較して違えば、元の文に全角数値が含まれていた事になる という考え方です。
その他の回答 (3)
- seimurakam
- ベストアンサー率61% (21/34)
最善の方法ではないかもしれませんが、 過去に似たような処理を行ったときの手順を。 function test($exp) { //評価対象文字列を半角に変換したものを用意する。 $exp2 = mb_convert_kana($val, 'ASKV'); //半角数値であればtrueを返す。 if (is_numeric($val)) { return true; //半角に変換した結果数値になるのであれば、 //元の値は全角数値であると判断し、falseを返す。 } else if(is_numeric($exp2)) { return false; } } コードは検証していませんがこんな方法でいかがでしょうか?
お礼
ありがとうございます うまくいきました
- okmotokun
- ベストアンサー率59% (92/155)
「数値」とは 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)
>全角数値の場合拒否したいのですが >全角数値が is_numeric で数値として認識しない為 全角数値を拒否するんですから、is_numetricで数値として 認識する必要はないんじゃないの?
お礼
全角文字列は許可したいのです。 もしたしたら全角数値がis_numetricでTRUEを返すかな? と思ったのですがFALSEでしたので、他に方法がないか教えて頂きたく 質問しました。 全角内容固定文字列->許可 半角数値->許可 全角数値->拒否
お礼
ありがとうございます うまくいきました