2012-09-29 20 views
13

संभव डुप्लिकेट:
Check if a variable is a natural numberपीएचपी जावास्क्रिप्ट के parseInt समारोह के बराबर है?

बस जहाँ मैं एक इनपुट स्वच्छ और PHP के साथ सभी गैर अंकों पात्रों को हटाने की जरूरत भर में आया था। खुद को एक समारोह बनाने का विचार, लेकिन पहले संभवतः संभव अंतर्निहित कार्यों पर जांच करना चाहता था, इसलिए मुझे पहिया को फिर से शुरू करने में अतिरिक्त समय बिताना पड़ेगा।

+0

चेक [php.net/Type कास्टिंग] (http://php.net/manual/en/language.types.type-juggling.php) – air4x

+0

क्यों न केवल अंतराल का उपयोग करें? – endy

उत्तर

23

आप नीचे के रूप में

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

या

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

आह, बिल्कुल वही जो मैं चाहता था। बहुत बहुत धन्यवाद। – think123

+2

@ think123 - यह इंगित करने लायक है कि (ए) यह एक int उत्पन्न नहीं करता है; यह अभी भी एक स्ट्रिंग है, यद्यपि केवल अंक हैं, और (बी) रेगेक्स इस परिदृश्य के लिए अधिक है। – Spudley

+1

सच है, लेकिन यह वास्तव में काम करता है कि एक है। मैं इसे सब कुछ संपादित कर दूंगा। – think123

2

आप उपयोग कर सकते हैं:

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

क्षमा करें, लेकिन यह वही नहीं है जो मैं चाहता हूं। '(int) 'सभी गैर अंकों वाले वर्णों को नहीं हटाएगा, स्ट्रिंग के अंदर कोई गैर-अंकीय वर्ण होने पर यह केवल' 0' वापस आ जाएगा। – think123

+2

@ think123: टाइप कास्टिंग '(int)' जावास्क्रिप्ट में 'parseInt()' जैसा ही होगा। यही वह है जो आपने पूछा, है ना? –

0

तुम भी 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 में pareseInt() के लिए एक सीधा बराबर क्योंकि PHP एक NaN डेटा प्रकार नहीं है नहीं है। parseInt()NaN का उत्पादन करेगा यदि मूल्य को पार्स नहीं किया जा सकता है।

इसके अतिरिक्त, parseInt() में रेडिक्स पैरामीटर है, जो कोई भी PHP विकल्प आपको नहीं देता है।

लेकिन उस ने कहा, अगर सभी आप क्या करना चाहते एक पूर्णांक में एक स्ट्रिंग की बारी है, तो वहाँ कई विकल्प हैं:

$int = (int)$string; 

$int = intval($string); 

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

उन तीन होगा ठीक उसी तरह सब काम करते हैं। कुछ किनारे के मामले हो सकते हैं जहां intval() अन्य दो से अलग है, लेकिन सामान्य रूप से, वे एक स्ट्रिंग को int में बदल देंगे। NaN की अनुपस्थिति में, वे सभी 0 (शून्य) आउटपुट करते हैं यदि स्ट्रिंग गैर संख्यात्मक है और इसे पार्स नहीं किया जा सकता है। लेकिन यह अधिकांश डीबी स्वच्छता उद्देश्यों के लिए पर्याप्त होना चाहिए।

यदि आप वास्तव में NaN त्रुटि पर चाहते हैं, तो निकटतम आपको null मिल जाएगा। आप filter_var() का उपयोग कर प्राप्त कर सकते हैं:

$value = filter_var(FALSE, FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE); 

तुम सिर्फ जांच करने के लिए कि स्ट्रिंग संख्यात्मक है चाहते हैं, is_numeric() समारोह है कि कर सकते हैं:

$bool = is_numeric($string); 

हालांकि, यह दशमलव के लिए सच वापस आती है और यह भी के लिए वैज्ञानिक नोटेशन, इसलिए ज्यादातर स्थितियों के लिए बिल्कुल सही नहीं हो सकता है।एक बेहतर विकल्प ctype_digit() जो सच लौटाता है यदि स्ट्रिंग केवल अंक से बना है है: इस सूट की गैर ई, regex विकल्प है

$bool = ctype_digit($string); 

हैं, तो हमेशा वहाँ preg_match() या preg_replace() का उपयोग कर, लेकिन इन निश्चित रूप से के लिए overkill रहे हैं इस तरह का परिदृश्य।

+0

(int) और intval() का उपयोग बहुत त्रुटि-सबूत हैं, लेकिन ध्यान रखें कि यदि स्ट्रिंग एक फ़्लोटिंग पॉइंट नंबर (यानी दशमलव है) का प्रतिनिधित्व करती है , तो इन कार्यों को बिंदु के बाद जो भी आता है उसे हटा दें। तो "3.999" बन जाता है 3. – Wytze

+0

@Wytze: सच है, लेकिन सवाल विशेष रूप से गैर-अंकों के पात्रों को हटाने के लिए कह रहा था, इसलिए धारणा यह होगी कि यह दशमलव नहीं है। यदि आपको दशमलव को संभालने की आवश्यकता है तो अन्य विकल्प भी हैं। – Spudley

संबंधित मुद्दे