php - हरण - पूर्णांक संख्या क्या होती है




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

Ctype_digit का उपयोग कर स्वीकृत उत्तर सही है, हालांकि आप फ़ंक्शन का उपयोग करके जीवन को आसान बना सकते हैं। यह चर को एक स्ट्रिंग में घुमाएगा, इसलिए आपको यह नहीं करना है:

function is_num($x){
    if(!is_string($x)){
        $x=(string)$x;
    }
    if(ctype_digit($x)){
      return true;
    }
    return false;
}

उपयोग:

if (is_num(56)) {
    // its a number
}

if (is_num('56')) {
    // its a number
}

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

function is_num($x){
    if(!is_string($x)){
        $x=(string)$x;
    }    
    if (strpos($x,'.')!==false) {      
        if(substr_count($x,'.')>1||strpos($x,'.')<1||strpos($x,'.')>=strlen($x)){
            return false;    
        }
        $x=str_replace('.','',$x);    
    }
    if(ctype_digit($x)){
        return true;
    }  
    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 में एक पूर्णांक है , क्योंकि पूर्णांक की मेरी आवश्यकताओं / परिभाषाएं अलग-अलग हैं।


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

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

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

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

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

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

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

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


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

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

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

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

    return false;
}

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

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

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

उपयोग:

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

}

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




validation