25

重複の可能性:
変数が自然数であるかどうかを確認します

入力をサニタイズし、PHPで数字以外のすべての文字を削除する必要がある場所に出くわしました。自分で関数を作ることを考えましたが、最初に可能な組み込み関数を確認したかったので、車輪の再発明に余分な時間を費やす必要はありません。

4

5 に答える 5

35

PHPにはデータ型pareseInt()がないため、PHPに直接相当するものはありません。値を解析できない場合に生成されます。NaNparseInt()NaN

さらにparseInt()、基数パラメーターがありますが、PHPオプションでは提供されません。

ただし、文字列を整数に変換するだけの場合は、いくつかのオプションがあります。

$int = (int)$string;

$int = intval($string);

$int = settype($string,'integer');

これら3つはすべてほぼ同じように機能します。intval()他の2つとは異なるいくつかのエッジケースがあるかもしれませんが、一般的に、それらは文字列をintに変換します。がない場合、文字列が数値ではなく、解析できない場合NaN、それらはすべて出力(ゼロ)します。0しかし、これはほとんどのDBサニテーションの目的には十分なはずです。

本当にNaNonエラーが必要な場合は、最も近いのはですnull。これは次を使用して取得できますfilter_var()

$value = filter_var(FALSE, FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE);

文字列が数値であることを確認したいだけの場合、is_numeric()関数は次のことを実行できます。

$bool = is_numeric($string);

ただし、小数および科学的記数法ではtrueが返されるため、ほとんどの状況では完全ではない可能性があります。より良いオプションはctype_digit()、文字列が数字のみで構成されている場合にtrueを返す方法です。

$bool = ctype_digit($string);

preg_match()このいずれにも当てはまらない場合は、またはを使用する正規表現オプションが常にありますpreg_replace()が、これらはこの種のシナリオでは間違いなくやり過ぎです。

于 2012-09-29T08:00:57.417 に答える
32

以下のように正規表現を使用できます

$int = (int) preg_replace('/\D/', '', $strNonNumeric);

また

$int = (int) preg_replace('/[^0-9]/', '', $strNonNumeric);
于 2012-09-29T07:29:32.560 に答える
5

次を使用できます。

$string = "90"; //string
$myInt = (int) $string; //parse to int
于 2012-09-29T07:27:18.093 に答える
3

FILTER_VALIDATE_INTフィルターの使用をお勧めします。

php.netのフィルターについて

于 2012-09-29T07:31:32.963 に答える
0

sscanfを使用することもできます(Cの場合と同じように)

<?php

    $str = "10";

    sscanf($str, "%d", $intVal);
    $intVal *= 10;

    echo $intVal;
?>

出力:

100

于 2012-09-29T07:29:41.217 に答える