हरण PHP जांचने के लिए जांच करें कि चर पूर्णांक है या नहीं




पूर्णांक संख्या क्या होती है (9)

सभी प्रकार की जांच करने के लिए निम्न, सार्वभौमिक फ़ंक्शन का उपयोग करें:

function is_digit($mixed) {
    if(is_int($mixed)) {
        return true;
    } elseif(is_string($mixed)) {
        return ctype_digit($mixed);
    }

    return false;
}

क्या ऐसा करने का कोई अच्छा तरीका है?

if( $_POST['id'] != (integer)$_POST['id'] )
    echo 'not a integer';

मैंने कोशिश की

if( !is_int($_POST['id']) )

लेकिन is_int() किसी कारण से काम नहीं करता है।

मेरा फॉर्म इस तरह दिखता है

<form method="post">
   <input type="text" name="id">
</form>

मैंने is_int() शोध किया है, और ऐसा लगता है कि अगर

is_int('23'); // would return false (not what I want)
is_int(23);   // would return true

मैंने भी कोशिश की है is_numeric()

is_numeric('23'); // return true
is_numeric(23); // return true
is_numeric('23.3'); // also returns true (not what I want)

ऐसा लगता है कि ऐसा करने का एकमात्र तरीका यह है: [यह एक बुरा तरीका है, ऐसा मत करो, नीचे नोट देखें]

if( '23' == (integer)'23' ) // return true
if( 23 == (integer)23 ) // return true
if( 23.3 == (integer)23.3 ) // return false
if( '23.3' == (integer)'23.3') // return false

लेकिन उपर्युक्त करने के लिए कोई कार्य है?

बस स्पष्ट करने के लिए, मुझे निम्नलिखित परिणाम चाहिए

23     // return true
'23'   // return true
22.3   // return false
'23.3' // return false

नोट: मैंने अभी अपना पिछला समाधान निकाला है जो मैंने प्रस्तुत किया है सभी तारों के लिए सच होगा। (धन्यवाद redreggae)

$var = 'hello';
if( $var != (integer)$var )
    echo 'not a integer';

// will return true! So this doesn't work either.

यह जांचने का डुप्लिकेट नहीं है कि कोई चर PHP में एक पूर्णांक है , क्योंकि पूर्णांक की मेरी आवश्यकताओं / परिभाषाएं अलग-अलग हैं।


मैं उपयोग करता हूं:

is_int($val)||ctype_digit($val)

इस पकड़ से केवल सकारात्मक पूर्णांक तारों की तुलना में ध्यान दें


ctype_digit कोशिश ctype_digit

if (!ctype_digit($_POST['id'])) {
    // contains non numeric characters
}

नोट: यह केवल string प्रकारों के साथ काम करेगा। तो आपको अपने सामान्य चर को string करने के लिए डालना होगा:

$var = 42;
$is_digit = ctype_digit((string)$var);

यह भी ध्यान दें: यह नकारात्मक पूर्णांक के साथ काम नहीं करता है। अगर आपको इसकी ज़रूरत है तो आपको रेगेक्स के साथ जाना होगा। मैंने this उदाहरण के लिए पाया:

संपादित करें: LajosVeres के लिए धन्यवाद, मैंने डी संशोधक जोड़ा है। तो 123\n वैध नहीं है।

if (preg_match("/^-?[1-9][0-9]*$/D", $_POST['id'])) {
    echo 'String is a positive or negative integer.';
}

अधिक: कास्टिंग के साथ सरल परीक्षण काम नहीं करेगा क्योंकि "php" == 0 true और "0" === 0 false ! इसके लिए तुलना तुलना तालिका देखें।

$var = 'php';
var_dump($var != (int)$var); // false

$var = '0';
var_dump($var !== (int)$var); // true

preg_match('/^\d+$/D',$variable) //edit 

PHP $_POST मानों में हमेशा टेक्स्ट ( string प्रकार) होते हैं।

आप एक चर को पूर्णांक प्रकार में इस तरह मजबूर कर सकते हैं:

$int_id = (int)$_POST['id'];

यह काम करेगा यदि आप निश्चित हैं कि $_POST['id'] एक पूर्णांक होना चाहिए । लेकिन अगर आप पूरी तरह से यह सुनिश्चित करना चाहते हैं कि इसमें केवल 0 से 9 तक की संख्याएं हों और कोई अन्य संकेत या प्रतीक उपयोग न करें:

if( ctype_digit( $_POST['id'] ) )
{
  $int_id = (int)$_POST['id'];
}

इसे जांचें: ctype_digit - यह मान्य करता है कि स्ट्रिंग में केवल अंक हैं, इसलिए सुनिश्चित करें कि उस फ़ंक्शन को int पास न करें क्योंकि यह संभवतः झूठी वापसी करेगा ; हालांकि $_POST से आने वाले सभी मूल्य हमेशा तार होते हैं ताकि आप सुरक्षित हों। इसके अलावा यह नकारात्मक संख्या को मान्य नहीं करेगा जैसे कि -18 - एक अंक नहीं है, लेकिन आप हमेशा ctype_digit(ltrim($number, '-'))

is_int वेरिएबल प्रकार की जांच करता है जो आपके मामले में string ; यह एक समान प्रकार के दो चर की तुलना करने के लिए (integer)$v === $v रूप में होगा == कुछ असली अस्पष्ट चीजें करता है; आपको हमेशा === उपयोग करना चाहिए जबतक कि आप "0af5gbd" == 0 तरह गड़बड़ नहीं करना चाहते हैं

साथ ही, ध्यान रखें कि ctype_digit आपको नहीं बताएगा कि स्ट्रिंग को वास्तव में एक वैध int में परिवर्तित किया जा सकता है क्योंकि अधिकतम पूर्णांक मान PHP_INT_MAX ; यदि आपका मान उससे बड़ा है, तो आपको PHP_INT_MAX वैसे भी मिलेगा।


यह जांचने के लिए is_numeric() का उपयोग करना है कि कोई चर एक पूर्णांक है या नहीं। यह फ़ंक्शन उदाहरण के लिए 3.14 लिए TRUE भेज देगा। यह अपेक्षित व्यवहार नहीं है

इसे सही तरीके से करने के लिए, आप इनमें से किसी एक विकल्प का उपयोग कर सकते हैं:

इस चर सारणी को ध्यान में रखते हुए:

$variables = [
    "TEST 0" => 0,
    "TEST 1" => 42,
    "TEST 2" => 4.2,
    "TEST 3" => .42,
    "TEST 4" => 42.,
    "TEST 5" => "42",
    "TEST 6" => "a42",
    "TEST 7" => "42a",
    "TEST 8" => 0x24,
    "TEST 9" => 1337e0
];

पहला विकल्प (FILTER_VALIDATE_INT तरीका):

# Check if your variable is an integer
if( ! filter_var($variable, FILTER_VALIDATE_INT) ){
  echo "Your variable is not an integer";
}

आउटपुट:

TEST 0 : 0 (type:integer) is not an integer ✘
TEST 1 : 42 (type:integer) is an integer ✔
TEST 2 : 4.2 (type:double) is not an integer ✘
TEST 3 : 0.42 (type:double) is not an integer ✘
TEST 4 : 42 (type:double) is an integer ✔
TEST 5 : 42 (type:string) is an integer ✔
TEST 6 : a42 (type:string) is not an integer ✘
TEST 7 : 42a (type:string) is not an integer ✘
TEST 8 : 36 (type:integer) is an integer ✔
TEST 9 : 1337 (type:double) is an integer ✔

दूसरा विकल्प (कास्टिंग तुलनात्मक तरीका):

# Check if your variable is an integer
if ( strval($variable) != strval(intval($variable)) ) {
  echo "Your variable is not an integer";
}

आउटपुट:

TEST 0 : 0 (type:integer) is an integer ✔
TEST 1 : 42 (type:integer) is an integer ✔
TEST 2 : 4.2 (type:double) is not an integer ✘
TEST 3 : 0.42 (type:double) is not an integer ✘
TEST 4 : 42 (type:double) is an integer ✔
TEST 5 : 42 (type:string) is an integer ✔
TEST 6 : a42 (type:string) is not an integer ✘
TEST 7 : 42a (type:string) is not an integer ✘
TEST 8 : 36 (type:integer) is an integer ✔
TEST 9 : 1337 (type:double) is an integer ✔

तीसरा विकल्प (CTYPE_DIGIT वे):

# Check if your variable is an integer
if( ! ctype_digit(strval($variable)) ){
  echo "Your variable is not an integer";
}

आउटपुट:

TEST 0 : 0 (type:integer) is an integer ✔
TEST 1 : 42 (type:integer) is an integer ✔
TEST 2 : 4.2 (type:double) is not an integer ✘
TEST 3 : 0.42 (type:double) is not an integer ✘
TEST 4 : 42 (type:double) is an integer ✔
TEST 5 : 42 (type:string) is an integer ✔
TEST 6 : a42 (type:string) is not an integer ✘
TEST 7 : 42a (type:string) is not an integer ✘
TEST 8 : 36 (type:integer) is an integer ✔
TEST 9 : 1337 (type:double) is an integer ✔

चौथा विकल्प (रेगेक्स वे):

# Check if your variable is an integer
if( ! preg_match('/^\d+$/', $variable) ){
  echo "Your variable is not an integer";
}

आउटपुट:

TEST 0 : 0 (type:integer) is an integer ✔
TEST 1 : 42 (type:integer) is an integer ✔
TEST 2 : 4.2 (type:double) is not an integer ✘
TEST 3 : 0.42 (type:double) is not an integer ✘
TEST 4 : 42 (type:double) is an integer ✔
TEST 5 : 42 (type:string) is an integer ✔
TEST 6 : a42 (type:string) is not an integer ✘
TEST 7 : 42a (type:string) is not an integer ✘
TEST 8 : 36 (type:integer) is an integer ✔
TEST 9 : 1337 (type:double) is an integer ✔

filter_var फ़ंक्शन का प्रयास करें

filter_var($_POST['id'], FILTER_VALIDATE_INT);

उपयोग:

if(filter_var($_POST['id'], FILTER_VALIDATE_INT)) { 
    //Doing somethings...

}

यदि आप जानते हैं कि यह एक स्ट्रिंग वैरिएबल है (जैसे पोस्ट ओ मान प्राप्त करें), तो आप इसका उपयोग कर सकते हैं:

function is_really_integer($var) {
  return $var == (string)(integer)$var;
}






validation