アプリ版:「スタンプのみでお礼する」機能のリリースについて

教えて頂けますか?
フォームからPOSTされた文字列が半角数値、または文字列の場合許可し、全角数値の場合拒否したいのですが
全角数値が is_numeric で数値として認識しない為
うまくいきません。
他に良い方法がありますか?
よろしくおねがいします。

if ( strlen($_POST['test']) != mb_strlen($_POST['test'],'UTF-8') &&
is_numeric($_POST['test']) == TRUE ){
echo '半角で入力してください。<br />';
}

A 回答 (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;
 }
}

コードは検証していませんがこんな方法でいかがでしょうか?
    • good
    • 1
この回答へのお礼

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

お礼日時:2009/09/15 10:38

「数値」とは 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はよく知らないので役にはたてんかも。。。
    • good
    • 0

mb_ereg_matchが使えそうだけど、文字コードの指定が


面倒だなっと・・・
というわけで代替案

if( $_POST['test'] != mb_convert_kana($_POST['test'],"n","UTF-8" ){
echo '半角で入力してください。<br />";
}

とかどうでしょ?

mb_convert_kanaで、全角数値を半角数値に変換し
元の文と比較して違えば、元の文に全角数値が含まれていた事になる
という考え方です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/09/15 10:38

>全角数値の場合拒否したいのですが


>全角数値が is_numeric で数値として認識しない為

全角数値を拒否するんですから、is_numetricで数値として
認識する必要はないんじゃないの?
    • good
    • 0
この回答へのお礼

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

全角内容固定文字列->許可
半角数値->許可
全角数値->拒否

お礼日時:2009/09/10 15:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!