web-dev-qa-db-ja.com

PHP JavaScriptのparseInt関数と同等?

可能性のある複製:
変数が自然数かどうかを確認

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

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

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

OR

$int = (int) preg_replace('/[^0-9]/', '', $strNonNumeric);
28
GBD

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

さらに、parseInt()にはradixパラメーターがあり、PHPオプションはどれも提供しません。

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

_$int = (int)$string;

$int = intval($string);

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

これら3つはすべて同じように機能します。 intval()が他の2つと異なるEdgeの場合がありますが、一般的には、文字列をintに変換します。 NaNがない場合、文字列が非数値で解析できない場合、すべて_0_(ゼロ)を出力します。しかし、これはほとんどのDB衛生目的には十分なはずです。

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

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

文字列が数値であることを単に確認したい場合、is_numeric()関数でそれを行うことができます。

_$bool = is_numeric($string);
_

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

_$bool = ctype_digit($string);
_

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

29
Spudley

次を使用できます。

$string = "90"; //string
$myInt = (int) $string; //parse to int
5
Wayne Whitty

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

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

3
Magnus Strand

Sscanfも使用できます(Cで行うように)

<?php

    $str = "10";

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

    echo $intVal;
?>

出力:

100

0
enhzflep