2

フォームがあり、いくつかの値が整数であるかどうかを確認する必要があります。これは非常に複雑なようです。

私は試した:

if (is_int($value)) 

これは機能しません。テキスト入力は常に文字列型変数を送信するため、どの値もfalseを返します。

if (is_numeric($value))

これは機能しますが、変数が数値であるかどうかのみを確認してください。整数かどうか知りたいので、1.3が受け入れられたくありません。

if (is_int( (int) $value ))

is_intを使用して、$valueを整数として強制的にキャストしようとしました。これも機能しません

だから、私が知らない他の解決策がない限り、私は唯一の方法は使用することだと思います ereg("^[0-9]*$",$value)

これ(パフォーマンス)に問題はありますか?本当にもっと簡単な解決策はありませんか?

敬具。

4

7 に答える 7

4

マリオが指摘したように、これctype_digit()は単一の機能的な方法です。

if (ctype_digit($_POST['value'])) {
  $for_santity = (int)$_POST['value'];
}

単純。速い。信頼性のある。

于 2012-11-09T16:56:46.347 に答える
1

ctype_digit() が最適な答えであることはわかっていますが、関数をサポートしていないバージョンの PHP を誰かが使用している場合に備えて、この答えを投稿します (私のテストケースのように: Ideone.com):

<?php
function testInt($a){
    if (intval($a)>0) {
        return (floatval($a)==intval($a)) ? 'true' : 'false';
    }
    return 'false';
}
?>

これは、ctype_digit()ページにリストされている例で機能します。

オンラインの例を次に示します: http://ideone.com/uePQto

于 2012-11-09T17:17:48.047 に答える
1

strpos正規表現を回避できます(カバーの下で 何をするかわからない)

if(!strpos($value,'.') && is_numeric($value))  

基本的に ctype_digit() を複製しました

PHP は私の母国語ではないので、申し訳ありません。ライブラリ関数を再作成するべきではないため、次を使用します。
if(ctype_digit())

于 2012-11-09T16:53:03.760 に答える
0

これはどう、

 if( is_numeric( $value ) && floor( $value ) != $value)

この場合、パフォーマンス測定はあまりにも些細なことです。

于 2012-11-09T16:45:25.613 に答える
0

受信した情報のデータ型を定義してみてください。POST 経由でフォームから情報を取得しているとしましょう:

$num_val = (int) $_POST['VALUE_FROM_FORM'];

is_int は正しい結果を返すと思いますが、受け取った結果が数値であることを確認する必要があります。

于 2012-11-09T16:45:55.100 に答える
0

PHP では、値を で確認できます。古い関数は非推奨であるpreg_matchため、使用しないでください。ereg

$id = $_GET['id'];
if (!preg_match('/^[0-9]*$/', $id)) {
    // there was an error and the value DIDN'T pass validation
} else {
    // continue as everything was OK :)
}

GETtoPOSTまたはtoを変更する必要がある場合がありますREQUEST

于 2012-11-09T16:46:27.090 に答える
0

1以上になると予想される整数を常に処理してきた方法(つまり、署名されていないプライマリINTキーを表すと想定される受信変数の場合):

$var = intval($_POST['form_var']);
if($var > 0){
    echo 'Good';
}
于 2012-11-09T16:47:26.423 に答える