php - जांच कर रहा है कि एक स्ट्रिंग में एक पूर्णांक है या नहीं




validation (9)

क्या आप किसी फ़ंक्शन के बारे में जानते हैं जो जांच सकता है कि स्ट्रिंग में पूर्णांक है या नहीं?

यहां बताया गया है कि मैं इसे कैसे काम करने की उम्मीद करूंगा:

holds_int("23") // should return true.  
holds_int("2.3") // should return false.  
holds_int("qwe") // should return false.

अपडेट करें PHP 7.1 के बाद से गैर-संख्यात्मक मानों के साथ is_int() का उपयोग करने में is_int() हैं, जैसा कि इस SO उत्तर में चर्चा की गई है। किसी भी मामले में, यह एक बहुत पुराना उत्तर है और मैं वास्तव में इसे इस बिंदु पर एक हैक के रूप में देख सकता हूं ताकि वाईएमएमवी;)

क्षमा करें अगर इस प्रश्न का उत्तर दिया गया है लेकिन इसने मेरे लिए अतीत में काम किया है:

सबसे पहले जांचें कि स्ट्रिंग is_numeric । यदि यह स्ट्रिंग को अपने प्रासंगिक प्रकार में घुमाने के लिए PHP प्राप्त करने के लिए मान में 0 जोड़ता है। फिर आप यह जांच सकते हैं कि यह is_int साथ int है is_int । त्वरित और गंदे लेकिन यह मेरे लिए काम करता है ...

$values = array(1, '2', '2.5', 'foo', '0xFF', 0xCC, 0644, '0777');

foreach ($values as $value) {
  $result = is_numeric($value) && is_int(($value + 0)) ? 'true' : 'false';
  echo $value . ': ' . $result . '<br />';
}

परिणाम:

1: true
2: true
2.5: false
foo: false
0xFF: true
204: true
420: true
0777: true

एकमात्र समस्या यह है कि यह सचमुच एक स्ट्रिंग में लिपटे अंडाकार मूल्यों का मूल्यांकन करेगा, यानी: '0123' बस 123 हो जाएगा। लेकिन यह पता करना आसान है :)


comparison.php:

<?php
function is_numeric_int($s)
{
  return (strval(intval($s)) === $s);
}

function print_ini($s)
{
  echo "$s: " . ( is_numeric_int($s) ? 'true' : 'false' ) . "\n";
}

print_ini('qwe');
print_ini('23');
print_ini('-23');
print_ini('23.0');
print_ini('-23.0');
?>

परीक्षण चालन:

$ php comparison.php 
qwe: false
23: true
-23: true
23.0: false
-23.0: false

दूसरा विकल्प

function holds_int($str)
   {
   return preg_match("/^-?[0-9]+$/", $str);
   }

दो मामले हो सकते हैं-

  1. आपको किसी संख्या के सटीक स्ट्रिंग प्रारूप की जांच करने की आवश्यकता है (अधिकांश उत्तर इस बारे में है)

  2. आप जांचना चाहते हैं कि क्या स्ट्रिंग में एक विशिष्ट संख्या है या नहीं

    preg_match('/'.$matching_number.'/',$container_string);


यदि आप प्रोजेक्ट में प्रोजेक्ट लाइब्रेरी का उपयोग करते हैं ( https://github.com/beberlei/assert ) तो आप इसे आसानी से एक पंक्ति में कर सकते हैं:

Assertion::integerish($var);

नोट: दावा के उल्लंघन के मामले में यह एक अपवाद फेंकता है।


यदि स्ट्रिंग में रिक्त स्थान हैं, तो @ जैक का उत्तर सटीक परिणाम प्रदान नहीं करेगा। जैसे

$var = '19   ';
if((string)(int)$var == $var) {
echo 'var is an integer or a string representation of an integer';
}

उपर्युक्त स्ट्रिंग उपर्युक्त चेक के अनुसार एक int नहीं होगी।

तो इसका उपयोग करने के बजाय, निम्न का प्रयास करें:

if(ctype_digit(trim('19  '))){
    echo 'it is digit ';
}else{
    echo 'it is not digit ';
}

हो सकता है कि यह दी गई स्थिति में भी मदद करेगा, php में एक फ़ंक्शन है जो पहले से ही ऐसा करता है, इसे "is_numeric ()" कहा जाता है, यह सच या गलत रूप से वापस आ जाएगा ..

   if(is_numeric($somestring) == True){
        echo "this string contains a integar";
    }

लिंक: http://www.php.net/is_numeric

आपने कहा "होल्डिंट (" 2 ") को सच होना चाहिए, अच्छी तरह से is_numeric (" 2 ") सही लौटाता है, और is_numeric (" a ") गलत है, जैसा कि अपेक्षित है, यह फ़ंक्शन php में मौजूद है, फिर से लिखने की कोई आवश्यकता नहीं है।


ctype_digit चाल करेगा:

ctype_digit($str)

  1. $str एक स्ट्रिंग होना है
  2. अतिरिक्त रिक्त स्थान की अनुमति नहीं है
  3. कोई दशमलव अंक नहीं .

if((string)(int)$var == $var) {
    echo 'var is an integer or a string representation of an integer';
}

उदाहरण परिणाम:

var_dump( test(1)             ); // TRUE
var_dump( test('1')           ); // TRUE
var_dump( test('1.0')         ); // TRUE
var_dump( test('1.1')         ); // false
var_dump( test('0xFF')        ); // false
var_dump( test('0123')        ); // TRUE
var_dump( test('01090')       ); // TRUE
var_dump( test('-1000000')    ); // TRUE
var_dump( test('+1000000')    ); // TRUE
var_dump( test('2147483648')  ); // false
var_dump( test('-2147483649') ); // false

गॉर्डन का जवाब नीचे देखें कि यह अलग तरीके से कैसे व्यवहार करेगा यदि === == बजाय तुलना के लिए उपयोग किया गया था।





validation