可能性のある複製:
変数が自然数かどうかを確認
PHPで入力をサニタイズし、数字以外の文字をすべて削除する必要がある場所に出くわしました。自分で関数を作成することを考えましたが、可能な組み込み関数を最初に確認したかったので、車輪の再発明に余分な時間を費やす必要はありません。
以下のように正規表現を使用できます
$int = (int) preg_replace('/\D/', '', $strNonNumeric);
OR
$int = (int) preg_replace('/[^0-9]/', '', $strNonNumeric);
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()
を使用する正規表現オプションが常にありますが、これらはこの種のシナリオでは間違いなく過剰です。
次を使用できます。
$string = "90"; //string
$myInt = (int) $string; //parse to int
FILTER_VALIDATE_INTフィルターの使用をお勧めします。
Sscanfも使用できます(Cで行うように)
<?php
$str = "10";
sscanf($str, "%d", $intVal);
$intVal *= 10;
echo $intVal;
?>
出力:
100