10

PHP のフォーム入力が数値かどうかを確認できる必要があります。数値でない場合、Web サイトはリダイレクトする必要があります。is_numeric() を試しましたが、うまくいかないようです。

コード例はいいでしょう。

数量に整数値を受け入れるショッピング カートを開発しています。私はこれを試しています:

if(!is_numeric($quantity)){
                //redirect($data['referurl']."/badinput");
                echo "is not numeric";
        }
4

9 に答える 9

14
if(!is_numeric($quantity == 0)){
                //redirect($data['referurl']."/badinput");
                echo "is not numeric";

ここにあるのは、2つのネストされた条件です。$quantityが1だとしましょう。

最初の条件は1==0と評価され、FALSEを返します。2番目の条件は、FALSEが数値であるかどうかをチェックし、FALSEは数値ではないためFALSEを返します。

書くだけ:

if (!is_numeric($quantity))
{
    echo 'is not numeric';
}
于 2008-11-25T16:28:15.020 に答える
7

おそらく、「数値」の意味を説明する必要があります。積分、浮動小数点、指数表記などです。is_numeric()これらすべてを受け入れます。

文字列に数字以外のものが含まれていないことを確認する場合は、正規表現を使用できます。

/^\d+$/

intval()実際の値を整数であるかのように使用する場合は、とにかくそれを通過させたいと思うでしょう。0値を解析できない場合0は返されます。が有効な値である場合は、おそらく次のようになります。何らかの方法でそれを処理するために、おそらく値のより低い範囲を制約することによって。

于 2008-11-25T16:19:42.790 に答える
2

JavaScript を使用して入力のクライアント側の検証を行うことも賢明かもしれません。

サーバーへの往復はタイプミスにつながる可能性があるため、長いものです。クライアント ブラウザーに事前に品質保証を少し行わせることで、サーバーのオーバーヘッドを削減できます。

于 2008-11-25T18:31:37.047 に答える
1

is_intis_numericを確認してください。各リンクには例があります。さらにサポートが必要な場合は、問題が発生しているデータとコードサンプルを投稿します。

編集:

$quantity == 0

ブール値(1または0)を返すため、常に数値になります。それを行う正しいこと:

if ( is_numeric( $quantity ) ) {
...
}

また

if ( is_int( $quantity ) ) {
...
}
于 2008-11-25T16:23:29.570 に答える
1

別の選択肢はctype_digitです。ドキュメントから:

Checks if all of the characters in the provided string, text, are numerical. Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise.

<?php
$strings = array('1820.20', '10002', 'wsl!12');
foreach ($strings as $testcase) {
    if (ctype_digit($testcase)) {
        echo "The string $testcase consists of all digits.\n";
    } else {
        echo "The string $testcase does not consist of all digits.\n";
    }
}
?>

上記の例では、次のように出力されます
。文字列 1820.20 はすべての数字で構成されていません。
文字列 10002 はすべて数字で構成されています。
文字列 wsl!12 はすべての数字で構成されていません。

<?php

$numeric_string = '42';
$integer        = 42;

ctype_digit($numeric_string);  // true
ctype_digit($integer);         // false (ASCII 42 is the * character)

is_numeric($numeric_string);   // true
is_numeric($integer);          // true
?>
于 2012-04-08T17:44:38.523 に答える
0

Robが言ったことは、数字をチェックするための正規表現の代わりに、ctype_digitを使用することです。

于 2008-11-25T16:25:12.530 に答える
0

正規表現を使用:/^\d+$/問題を解決する必要があります

于 2012-04-08T15:06:53.097 に答える
0

これを試して:

$numeric = "1"; //true default

$string = trim($_GET['string']);

$chkarray = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ",", ".");

for ($i=0; $i < strlen($string); $i++) { 
    if (!in_array(substr($string, $i, 1), $chkarray)) {
        $numeric = "0";
        break;
    }
}
于 2014-07-10T09:33:28.930 に答える
0

これまでのところ、tharkun が最良の回答をしています。このような質問をしているのであれば、まだ正規表現をいじりたくないのではないでしょうか。

ロジックを再考してください。$quantity==0 が数値結果かどうかを確認する必要があるのはなぜですか? エラーを回避しようとしている場合は、数量に値が割り当てられていない可能性があると考えています。チェックが少し遅れています。これは、アプリケーションで非常に一般的な (悪質な) セキュリティ ホールです。$quantity にユーザー入力から派生した値がある場合は、実行のこの時点に到達する前に入力をサニタイズしてください。問題の小さな部分として、以前に入力をサニタイズしたため、デフォルト値を割り当てる必要はありません (サニタイズは、「入力なし」の状況に対処する場所です)。

幸運を!

于 2008-11-25T17:04:42.527 に答える