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




validation (12)

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

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

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

Answers

झोंग के जवाब को सीडब्लू में गलती से नहीं बदलना चाहते हैं, इसलिए रिकॉर्ड के लिए परिणाम तब होते हैं जब === बजाय === साथ परीक्षण किया जाता है।

function test($var) {
    return ((string)(int)$var === $var);
}

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

is_int केवल यही काम है जो इस काम को करने के लिए है।


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

मुझे निसान के सुझाव पसंद आया, लेकिन ध्यान दिया कि यह '0123' के लिए गलत होगा। मैं अब यह कर रहा हूँ:

(string)(int)$var === ltrim((string)$var, '0')

(यह एक टिप्पणी @nyson के रूप में पोस्ट किया गया होगा, लेकिन मेरे पास अभी तक ऐसा करने के लिए पर्याप्त विशेषाधिकार नहीं हैं)।

जोड़ने के लिए संपादित: यदि आप शून्य होना चाहते हैं, तो आपको कुछ ऐसा करने की ज़रूरत है

(int)$var === 0 || (string)(int)$var === ltrim((string)$var, '0')

अपडेट करें 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 हो जाएगा। लेकिन यह पता करना आसान है :)


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

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


ctype_digit चाल करेगा:

ctype_digit($str)

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

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

$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 ';
}

दूसरा विकल्प

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

सबसे तेज़ तरीका नहीं है, लेकिन filter_var() काफी सटीक है:

function test($s)
{
    return filter_var($s, FILTER_VALIDATE_INT) !== false;
}

झोंग के answer आधार पर परिणाम यहां दिए गए हैं, मतभेदों के साथ चिह्नित !! :

var_dump(test(1)            ); // true
var_dump(test('1')          ); // true
var_dump(test('1.0')        ); // false !!
var_dump(test('1.1')        ); // false
var_dump(test('0xFF')       ); // false
var_dump(test('0123')       ); // false !!
var_dump(test('01090')      ); // false !!
var_dump(test('-1000000')   ); // true
var_dump(test('+1000000')   ); // true
var_dump(test('2147483648') ); // true !! on 64bit
var_dump(test('-2147483649')); // true !! on 64bit

ऑक्टल पूर्णांक की अनुमति देने के लिए:

function test($s)
{
   return filter_var($s, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_OCTAL) !== false;
}

परिणाम:

var_dump(test('0123') ); // true
var_dump(test('01090')); // false !!

हेक्साडेसिमल नोटेशन की अनुमति देने के लिए:

function test($s)
{
   return filter_var($s, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX) !== false;
}

परिणाम:

var_dump(test('0xFF')); // true !!

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

Assertion::integerish($var);

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


यदि आप रनटाइम के दौरान एक चर सामग्री को देखना चाहते हैं, तो XDebug जैसे वास्तविक डीबगर का उपयोग करने पर विचार करें। इस तरह आपको अपने स्रोत कोड को गड़बड़ करने की आवश्यकता नहीं है और सामान्य उपयोगकर्ता आपके एप्लिकेशन पर जाने के दौरान भी आप डीबगर का उपयोग कर सकते हैं। वे ध्यान नहीं देंगे।







php validation