2012-06-07 20 views
5
function validInteger(theNumber){ 
    var anyNonDigits = new RegExp('\D','g'); 
    if(parseInt(theNumber)&&!anyNonDigits.test(theNumber)){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

ऊपर एक ऐसा फ़ंक्शन है जिसे मैंने कुछ इनपुट मान्य करने के लिए लिखा है। मैं सभी सकारात्मक पूर्णांक चाहता हूँ। मुझे जिस समस्या का सामना करना पड़ रहा है वह RegExp ऑब्जेक्ट के साथ है। ऐसा लगता है कि यह बहुत आसान होना चाहिए, लेकिन किसी कारण से यह काम नहीं कर रहा है।यह सत्यापित करने के लिए एक नियमित अभिव्यक्ति का उपयोग करना है कि इनपुट में कोई गैर अंकों है

उदाहरण के लिए यदि मैं 'f5' पास करता हूं तो मैं सच हो जाता हूं, लेकिन अगर मैं '5 एफ' पास करता हूं तो मुझे झूठा लगता है। नकारात्मक संख्याओं को पार करते समय मुझे भी समस्याएं आ रही हैं। -3 अगर मैं RegExp में पास करने से पहले चर को स्ट्रिंग करता हूं तो भी पकड़ा नहीं जाता है। मैं अपने if स्टेटमेंट में '&&parseInt(theNumber)>0' जोड़ कर इसे ठीक कर सकता हूं, लेकिन मुझे लगता है कि RegExp को भी पकड़ना चाहिए। अग्रिम में धन्यवाद!

+1

नियमित अभिव्यक्ति काम नहीं करती है क्योंकि आपको '\ 'वर्ण से बचने की आवश्यकता है क्योंकि \' का अर्थ शाब्दिक नोटेशन में भी है। 'नया RegExp ('\\ डी', 'जी');' –

+0

... भी, आपको वास्तव में 'g' संशोधक की आवश्यकता नहीं होगी, क्योंकि ऐसा लगता है कि यहां तक ​​कि एक गैर-अंक भी ध्वजांकित करने के लिए पर्याप्त होना चाहिए इनपुट। –

+0

@amnotiam इस जानकारी के लिए धन्यवाद कि मैं जो कर रहा था वह काम नहीं कर रहा था। नियमित अभिव्यक्ति कुछ ऐसा है जो मैं अभी भी नया हूं। उम्मीद है कि मैं जल्द ही इसे बदल दूंगा। –

उत्तर

11
सीधे शब्दों में

:

function validInteger(theNumber){  
    return theNumber.match(/^\d+$/) && parseInt(theNumber) > 0; 
} 

Live DEMO

या regex के रूप में ही @Eric ने सुझाव दिया साथ और भी आसान:

return /^[0-9]\d*$/.test(theNumber); 

Live DEMO

अद्यतन:

An excellent cheat sheet.

+0

'parseInt (संख्या)> 0':'/^ [1-9] \ d * $/' – Eric

+0

@Eric के लिए कोई आवश्यकता नहीं है। सुझाव के लिए धन्यवाद, मैंने इसे आपके नाम से जोड़ा। – gdoron

+0

मुझे लगता है कि regex '*' "शून्य या अधिक" के बाद वैध खाली स्ट्रिंग को कॉल करेगा, आप "एक या अधिक" – jbabey

1

यह ठीक RegExp का उपयोग नहीं करते है, तो आप कर सकते हैं:

function validInteger(theNumber){ 
    var number = +theNumber; 

    return number > -1 && number % 1 === 0; 
} 

यह मानते हुए कि आप के रूप में सकारात्मक पूर्णांक 0 पर विचार करें, और आप के बीच एक अंतर बनाने के लिए नहीं करना चाहते हैं +0 और -0।

ध्यान दें कि यह फ़ंक्शन theNumber के लिए कोई मान स्वीकार करेगा जिसे एक संख्या में परिवर्तित किया जा सकता है, न कि केवल "स्ट्रिंग", और आप निश्चित रूप से संख्या भी पास कर सकते हैं।

+0

शायद आपका मतलब '-1 <संख्या' है? –

+1

हाँ क्षमा करें, मेरे टाइपो। :) – ZER0

+0

@amnotiam। क्या कोई अंतर है (मुझे पता है कि वे अलग-अलग चीजें करते हैं) 'if (str।मैच()) 'और' अगर (/.../। परीक्षण (str)) '? – gdoron

0

सरल बनें!

function validate(num){ 
    return (num | 0) > 0; 
}; 

यह फ़ंक्शन केवल सकारात्मक पूर्णांक के लिए "सत्य" लौटाएगा।

+1

इस बात पर निर्भर करता है कि आप हेक्साडेसिमल नोटेशन का मूल्यांकन कैसे करना चाहते हैं। '('0xff' | 0)> 0; // सच' –

+1

'(" +123 "| 0)> 0' =>' true' => टूटा हुआ ... ':)' – gdoron