2012-09-29 13 views
13

可能性の重複:
Check if a variable is a natural numberJavaScriptのJavaScriptのparseInt関数に相当するPHP?

はちょうど私が入力をサニタイズし、PHPですべての数字以外の文字を削除する必要がある場所に出くわしました。機能を自分で作っていると思っていましたが、最初に可能な組み込み関数をチェックしたかったので、余分な時間を費やす必要はありません。

+0

check [php.net /タイプキャスティング](http://php.net/manual/en/language.types.type-juggling.php) – air4x

+0

なぜintvalを使用しないのですか? – endy

答えて

23

あなたが

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

OR

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

ああ、まさに私が望んでいた。どうもありがとう。 – think123

+2

@ think123 - これは(a)これはintを生成しないことを指摘する価値があります。それでも文字列であるにもかかわらず数字だけを含んでいて、(b)正規表現はこのシナリオでは残念です。 – Spudley

+1

真実ですが、これは実際に動作するものの1つです。私はそれをすべて同じに編集します。 – think123

2

あなたは使用することができます。

$string = "90"; //string 
$myInt = (int) $string; //parse to int 
+0

申し訳ありませんが、それは私が欲しいものではありません。 '(int)'はすべての非数字文字を削除しません。文字列の中に数字以外の文字があれば '0'を返します。 – think123

+2

@ think123:型キャスト '(int)'はjavascriptの 'parseInt()'と同じことをします。これはあなたが尋ねたものですね。 –

0

ます。また、(あなたがCで行うと同じように)sscanf関数を使用することができます以下のように正規表現を使用することができます

<?php 

    $str = "10"; 

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

    echo $intVal; 
?> 

出力:

3

私はFILTER_VALIDATE_INTフィルターを使用することをお勧めします。

about Filters on php.net

+0

-1 w3schoolsリンクは入れないでください。代わりに 'php.net'を入れてください。私はあなたの投票を返すでしょう。 – think123

+1

+2はあなたの投票を保証してくれました。 – think123

+3

ああ、ちょっとした理由:http://www.w3fools.com – think123

19

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

さらに、parseInt()にはradixパラメータがありますが、これはPHPオプションのいずれにも該当しません。

$int = (int)$string; 

$int = intval($string); 

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

これらの3つはほぼ同じ方法ですべての動作します:あなたがしたいすべてが整数に文字列を入れている場合

しかし、それは言った、その後、いくつかのオプションがあります。 intval()が他の2つと異なる場合がありますが、通常は文字列を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()です:このスーツの非eは、preg_match()preg_replace()を使用して、常に正規表現のオプションがあり

$bool = ctype_digit($string); 

場合、これらは間違いのために行き過ぎていますこの種のシナリオ。

+0

(int)とintval()の使用は非常に誤りですが、文字列が浮動小数点数(小数点以下の桁数)を表す場合、これらの関数は、ポイントの後に来るものを単に削除します。だから "3.999"は3になります。 – Wytze

+0

@Wytze:trueですが、問題は数字以外の文字を削除することを特に要求していたので、それは小数ではないと仮定します。小数点を処理する必要がある場合は、他にもオプションがあります。 – Spudley