मुझे उम्मीद है कि पुराने VB6 IsNumeric()
फ़ंक्शन के समान वैचारिक स्थान में कुछ है ?
isNaN("")
, isNaN(" ")
, isNaN(false)
, आदि यह रिटर्न false
इन के लिए, जिसका अर्थ है कि वे नंबर हैं।
मुझे उम्मीद है कि पुराने VB6 IsNumeric()
फ़ंक्शन के समान वैचारिक स्थान में कुछ है ?
isNaN("")
, isNaN(" ")
, isNaN(false)
, आदि यह रिटर्न false
इन के लिए, जिसका अर्थ है कि वे नंबर हैं।
जवाबों:
यह परवाह किए बिना काम करता है कि चर सामग्री एक स्ट्रिंग या संख्या है।
isNaN(num) // returns true if the variable does NOT contain a valid number
isNaN(123) // false
isNaN('123') // false
isNaN('1e10000') // false (This translates to Infinity, which is a number)
isNaN('foo') // true
isNaN('10px') // true
यदि आप की जरूरत है, तो बेशक, आप इसे नकार सकते हैं। उदाहरण के लिए, IsNumeric
आपके द्वारा दिए गए उदाहरण को लागू करने के लिए:
function isNumeric(num){
return !isNaN(num)
}
केवल तभी काम करता है जब स्ट्रिंग में केवल संख्यात्मक वर्ण होते हैं, अन्यथा यह वापस आ जाता है NaN
।
+num // returns the numeric value of the string, or NaN
// if the string isn't purely numeric characters
+'12' // 12
+'12.' // 12
+'12..' // NaN
+'.12' // 0.12
+'..12' // NaN
+'foo' // NaN
+'12px' // NaN
उदाहरण के लिए '12px' को 12 में परिवर्तित करने के लिए उपयोगी:
parseInt(num) // extracts a numeric value from the
// start of the string, or NaN.
parseInt('12') // 12
parseInt('aaa') // NaN
parseInt('12px') // 12
parseInt('foo2') // NaN These last two may be different
parseInt('12a5') // 12 from what you expected to see.
ध्यान रखें कि, इसके विपरीत +num
, parseInt
(जैसा कि नाम से पता चलता है) एक फ़्लोट को पूर्णांक में दशमलव बिंदु के बाद सब कुछ काट कर परिवर्तित कर देगा (यदि आप इस व्यवहार के parseInt()
कारण उपयोग करना चाहते हैं, तो आप शायद इसके बजाय किसी अन्य विधि का उपयोग करके बेहतर हैं ) :
+'12.345' // 12.345
parseInt(12.345) // 12
parseInt('12.345') // 12
खाली तार थोड़े काउंटर-सहज हो सकते हैं। +num
रिक्त तारों या तारों को रिक्त स्थान के साथ शून्य में परिवर्तित करता है, और isNaN()
उसी को मानता है:
+'' // 0
+' ' // 0
isNaN('') // false
isNaN(' ') // false
लेकिन parseInt()
सहमत नहीं है:
parseInt('') // NaN
parseInt(' ') // NaN
isNaN
"यह देखने के लिए जाँच नहीं कर सकते कि एक चर एक संख्या नहीं है"। "एक संख्या नहीं" "IEEE-794 NaN" के समान नहीं है, जो कि isNaN
परीक्षण है। विशेष रूप से, यह उपयोग विफल हो जाता है जब बूलियन और खाली तारों का परीक्षण किया जाता है, तो कम से कम। Developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… देखें ।
var n = 'a'; if (+n === +n) { // is number }
यह क्रोम के नवीनतम संस्करण में आईएनएएन की तुलना में ~ 3994% तेज है। प्रदर्शन परीक्षण यहाँ देखें: jsperf.com/isnan-vs-typeof/5
isNaN(1 + false + parseInt("1.do you trust your users?"))
और आप RegExp-way जा सकते हैं:
var num = "987238";
if(num.match(/^-{0,1}\d+$/)){
//valid integer (positive or negative)
}else if(num.match(/^\d+\.\d+$/)){
//valid float
}else{
//not valid number
}
यदि आप केवल यह जांचने की कोशिश कर रहे हैं कि क्या एक स्ट्रिंग एक पूर्ण संख्या (कोई दशमलव स्थान) नहीं है, तो regex जाने का एक अच्छा तरीका है। अन्य विधियाँ जैसे कि isNaN
कुछ सरल के लिए बहुत जटिल हैं।
function isNumeric(value) {
return /^-{0,1}\d+$/.test(value);
}
console.log(isNumeric('abcd')); // false
console.log(isNumeric('123a')); // false
console.log(isNumeric('1')); // true
console.log(isNumeric('1234567890')); // true
console.log(isNumeric('-23')); // true
console.log(isNumeric(1234)); // true
console.log(isNumeric('123.4')); // false
console.log(isNumeric('')); // false
console.log(isNumeric(undefined)); // false
console.log(isNumeric(null)); // false
केवल सकारात्मक पूर्ण संख्याओं का उपयोग करने की अनुमति देने के लिए:
function isNumeric(value) {
return /^\d+$/.test(value);
}
console.log(isNumeric('123')); // true
console.log(isNumeric('-23')); // false
/^-?\d+$/
सही?
क्या तुम सच में लगता है कि एक स्ट्रिंग केवल एक नंबर, किसी भी संख्या (पूर्णांक या चल बिन्दु), और वास्तव में एक संख्या में शामिल हैं सुनिश्चित करना चाहते हैं, तो आप नहीं कर सकते हैं का उपयोग करें parseInt()
/ parseFloat()
, Number()
या !isNaN()
स्वयं के द्वारा। ध्यान दें कि !isNaN()
वास्तव में true
जब Number()
एक नंबर वापस आएगा, और false
जब वह वापस आएगाNaN
, तो मैं इसे बाकी चर्चा से बाहर कर दूंगा।
इसके साथ समस्या parseFloat()
यह है कि यदि स्ट्रिंग में कोई भी संख्या है तो भी यह एक नंबर लौटाएगा, भले ही स्ट्रिंग में केवल और ठीक एक संख्या न हो :
parseFloat("2016-12-31") // returns 2016
parseFloat("1-1") // return 1
parseFloat("1.2.3") // returns 1.2
इसके साथ समस्या Number()
यह है कि यह उन मामलों में एक नंबर लौटाएगा जहां पारित मूल्य एक संख्या नहीं है!
Number("") // returns 0
Number(" ") // returns 0
Number(" \u00A0 \t\n\r") // returns 0
अपने स्वयं के रेगेक्स को रोल करने में समस्या यह है कि जब तक आप फ्लोटिंग पॉइंट नंबर के मिलान के लिए सटीक रेगेक्स नहीं बनाते हैं क्योंकि जावास्क्रिप्ट यह पहचानता है कि आप मामलों को मिस करने जा रहे हैं या उन मामलों को पहचानते हैं जहां आपको नहीं करना चाहिए। और यहां तक कि अगर आप अपने स्वयं के रेगेक्स को रोल कर सकते हैं, तो क्यों? इसे करने के सरल तरीके हैं।
हालांकि, यह पता चलता है कि Number()
(और isNaN()
) हर मामले के लिए सही काम करता है, जहां parseFloat()
एक नंबर देता है जब इसे नहीं होना चाहिए, और इसके विपरीत। इसलिए यह पता लगाने के लिए कि क्या वास्तव में एक स्ट्रिंग वास्तव में और केवल एक संख्या है, दोनों फ़ंक्शन को कॉल करें और देखें कि क्या वे दोनों सच हैं:
function isNumber(str) {
if (typeof str != "string") return false // we only process strings!
// could also coerce to string: str = ""+str
return !isNaN(str) && !isNaN(parseFloat(str))
}
' 1'
, '2 '
और ' 3 '
सब सच लौटा।
isNumber
फ़ंक्शन की आवश्यकता होती है, वे उपयोगकर्ता इंटरफेस के साथ काम नहीं कर रहे हैं। इसके अलावा, एक अच्छी संख्या इनपुट रिक्त स्थान को शुरू करने की अनुमति नहीं देगा।
इस प्रश्न के लिए स्वीकृत उत्तर में कुछ खामियां हैं (जैसा कि अन्य उपयोगकर्ताओं के युगल द्वारा हाइलाइट किया गया है)। यह जावास्क्रिप्ट में इसे प्राप्त करने का सबसे आसान और सिद्ध तरीका है:
function isNumeric(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
नीचे कुछ अच्छे परीक्षण मामले दिए गए हैं:
console.log(isNumeric(12345678912345678912)); // true
console.log(isNumeric('2 ')); // true
console.log(isNumeric('-32.2 ')); // true
console.log(isNumeric(-32.2)); // true
console.log(isNumeric(undefined)); // false
// the accepted answer fails at these tests:
console.log(isNumeric('')); // false
console.log(isNumeric(null)); // false
console.log(isNumeric([])); // false
प्रयास करें isNan समारोह :
IsNaN () फ़ंक्शन निर्धारित करता है कि क्या मान एक अवैध संख्या है (नॉट-ए-नंबर)।
यदि मान NaN के बराबर है, तो यह फ़ंक्शन सही है। अन्यथा यह झूठे लौटता है।
यह फ़ंक्शन संख्या विशिष्ट Number.isNaN () विधि से अलग है ।
वैश्विक एनएनएएन () फ़ंक्शन, परीक्षण किए गए मान को एक संख्या में परिवर्तित करता है, फिर उसका परीक्षण करता है।
Number.isNan () मानों को संख्या में परिवर्तित नहीं करता है, और किसी भी मान के लिए सही नहीं लौटेगा जो कि प्रकार का नहीं है ...
isNaN()
रिटर्न जिसमें केवल व्हाट्सएप वर्ण हैं, जिसमें '\ u00A0' जैसी चीजें शामिल हैं। false
पुराना सवाल है, लेकिन दिए गए उत्तरों में कई बिंदु गायब हैं।
वैज्ञानिक संकेत।
!isNaN('1e+30')
है true
, हालांकि अधिकांश मामलों में जब लोगों को संख्या के लिए पूछना, वे तरह बातें मिलान करने के लिए नहीं करना चाहती 1e+30
।
बड़े फ्लोटिंग नंबर अजीब व्यवहार कर सकते हैं
निरीक्षण (Node.js का उपयोग करके):
> var s = Array(16 + 1).join('9')
undefined
> s.length
16
> s
'9999999999999999'
> !isNaN(s)
true
> Number(s)
10000000000000000
> String(Number(s)) === s
false
>
दूसरी ओर:
> var s = Array(16 + 1).join('1')
undefined
> String(Number(s)) === s
true
> var s = Array(15 + 1).join('9')
undefined
> String(Number(s)) === s
true
>
इसलिए, यदि कोई उम्मीद करता है String(Number(s)) === s
, तो अपने तारों को अधिकतम 15 अंकों तक सीमित करें (अग्रणी शून्य को छोड़ने के बाद)।
अनन्तता
> typeof Infinity
'number'
> !isNaN('Infinity')
true
> isFinite('Infinity')
false
>
उस सब को देखते हुए, यह जांचना कि दिए गए तार निम्नलिखित में से सभी को संतुष्ट करने वाली संख्या है:
Number
और वापस करने के लिए उम्मीद के मुताबिक रूपांतरणString
इतना आसान काम नहीं है। यहाँ एक सरल संस्करण है:
function isNonScientificNumberString(o) {
if (!o || typeof o !== 'string') {
// Should not be given anything but strings.
return false;
}
return o.length <= 15 && o.indexOf('e+') < 0 && o.indexOf('E+') < 0 && !isNaN(o) && isFinite(o);
}
हालांकि, यहां तक कि यह पूरी तरह से दूर है। अग्रणी शून्य को यहां संभाला नहीं जाता है, लेकिन वे लंबाई परीक्षण को पेंच करते हैं।
मैंने परीक्षण किया है और माइकल का समाधान सबसे अच्छा है। उसके उत्तर के लिए वोट दें (इस पेज को "यदि आप वास्तव में यह सुनिश्चित करना चाहते हैं कि एक स्ट्रिंग" इसे खोजने के लिए खोज करें)। संक्षेप में, उसका उत्तर यह है:
function isNumeric(num){
num = "" + num; //coerce num to be a string
return !isNaN(num) && !isNaN(parseFloat(num));
}
यह प्रत्येक परीक्षण मामले के लिए काम करता है, जिसे मैंने यहां दस्तावेज दिया था: https://jsfiddle.net/wggehvp9/5/
अन्य कई समाधान इन धार मामलों के लिए विफल होते हैं: '', अशक्त, "", सत्य और []। सिद्धांत रूप में, आप उनका उपयोग कर सकते हैं, उदाहरण के लिए उचित त्रुटि से निपटने के साथ:
return !isNaN(num);
या
return (+num === +num);
/ \ / s, null, "", true, false, [] (और अन्य?) के लिए विशेष हैंडलिंग के साथ?
आप संख्या के परिणाम का उपयोग कर सकते हैं इसके कंस्ट्रक्टर को एक तर्क देते समय ।
यदि तर्क (एक स्ट्रिंग) को एक संख्या में परिवर्तित नहीं किया जा सकता है, तो यह NaN देता है, इसलिए आप यह निर्धारित कर सकते हैं कि प्रदान की गई स्ट्रिंग वैध संख्या थी या नहीं।
नोट: नोट जब रिक्त स्ट्रिंग या गुजर '\t\t'
और '\n\t'
के रूप में संख्या 0 प्राप्त होगा; सही पासिंग 1 और गलत रिटर्न 0 होगा।
Number('34.00') // 34
Number('-34') // -34
Number('123e5') // 12300000
Number('123e-5') // 0.00123
Number('999999999999') // 999999999999
Number('9999999999999999') // 10000000000000000 (integer accuracy up to 15 digit)
Number('0xFF') // 255
Number('Infinity') // Infinity
Number('34px') // NaN
Number('xyz') // NaN
Number('true') // NaN
Number('false') // NaN
// cavets
Number(' ') // 0
Number('\t\t') // 0
Number('\n\t') // 0
Number
निर्माता बिल्कुल के रूप में एक ही है +x
।
Number()
फ्लोट नंबरों को भी संभालता है, जैसे Number.parseFloat()
नहींNumber.parseInt()
हो सकता है कि इस सवाल पर एक या दो लोग आ रहे हों, जिन्हें सामान्य से अधिक सख्त जांच की जरूरत होती है (जैसे मैंने किया)। उस स्थिति में, यह उपयोगी हो सकता है:
if(str === String(Number(str))) {
// it's a "perfectly formatted" number
}
सावधान रहें! इस तरह तार को अस्वीकार कर देंगे .1
, 40.000
, 080
, 00.1
। यह बहुत picky है - स्ट्रिंग को " सबसे न्यूनतम परिपूर्ण रूप से मेल खाना चाहिए इस परीक्षण को पास करने के " से ।
यह स्ट्रिंग को एक नंबर पर वापस भेजने के लिए String
और Number
कंस्ट्रक्टर का उपयोग करता है और इस प्रकार जांचता है कि क्या जावास्क्रिप्ट इंजन का "सही न्यूनतम रूप" (आरंभिक Number
कंस्ट्रक्टर के साथ परिवर्तित हो गया ) मूल स्ट्रिंग से मेल खाता है।
(str === String(Math.round(Number(str))))
:।
"Infinity"
, "-Infinity"
है, और "NaN"
इस परीक्षा उत्तीर्ण। हालांकि, यह एक अतिरिक्त Number.isFinite
परीक्षण का उपयोग करके तय किया जा सकता है ।
str === ("" + +str)
। यह मूल रूप से जांचता है कि क्या स्ट्रिंग एक जेएस संख्या को संशोधित करने का परिणाम है। यह जानने के बाद, हम एक समस्या भी देख सकते हैं: परीक्षा उत्तीर्ण होती है, 0.000001
लेकिन इसके लिए असफल हो जाता है 0.0000001
, जो कि 1e-7
इसके बजाय पास हो जाता है। बहुत बड़ी संख्या के लिए समान।
parseInt (), लेकिन ध्यान रखें कि यह फ़ंक्शन इस अर्थ में थोड़ा अलग है कि यह उदाहरण के लिए parseInt ("100px") के लिए 100 रिटर्न देता है।
parseInt(09)
।
paraseInt(09, 10)
, 10
किसी भी तर्क की आवश्यकता नहीं है । parseInt('09')
अब बराबर 9.
उद्धरण:
यदि कोई वैरिएबल नंबर नहीं है तो isNaN (संख्या) // रिटर्न सही है
यदि आप अग्रणी / अनुगामी स्थानों के लिए जाँच करने की आवश्यकता पूरी तरह से सच नहीं है - उदाहरण के लिए जब अंकों की एक निश्चित मात्रा की आवश्यकता होती है, और आपको संभवतः 11 पिन के लिए '1111' और '111' या '111' प्राप्त करने की आवश्यकता होती है। इनपुट।
उपयोग करने के लिए बेहतर:
var num = /^\d+$/.test(num)
'-1'
, '0.1'
और '1e10'
सभी झूठे लौटते हैं। इसके अलावा, सकारात्मक अनन्तता से बड़ा मान या ऋणात्मक अनन्तता की तुलना में छोटा होना सही है, जबकि उन्हें संभवतः गलत लौटना चाहिए।
JQuery का कार्यान्वयन पर्याप्त रूप से अच्छा क्यों नहीं है?
function isNumeric(a) {
var b = a && a.toString();
return !$.isArray(a) && b - parseFloat(b) + 1 >= 0;
};
माइकल ने कुछ इस तरह का सुझाव दिया (हालाँकि मैंने "user1691651 चुराया है - जॉन का यहाँ बदला हुआ संस्करण):"
function isNumeric(num){
num = "" + num; //coerce num to be a string
return !isNaN(num) && !isNaN(parseFloat(num));
}
निम्नलिखित सबसे खराब प्रदर्शन के साथ एक समाधान है, लेकिन ठोस परिणाम हैं। यह jQuery के 1.12.4 कार्यान्वयन और माइकल के जवाब से बना एक कंट्रोवर्सी है, जिसमें प्रमुख / अनुगामी रिक्त स्थान के लिए एक अतिरिक्त जांच होती है (क्योंकि माइकल का संस्करण प्रमुख / अनुगामी स्थानों के साथ संख्या विज्ञान के लिए सही है):
function isNumeric(a) {
var str = a + "";
var b = a && a.toString();
return !$.isArray(a) && b - parseFloat(b) + 1 >= 0 &&
!/^\s+|\s+$/g.test(str) &&
!isNaN(str) && !isNaN(parseFloat(str));
};
बाद के संस्करण में दो नए चर हैं, हालांकि। उनमें से एक के आसपास एक कर सकता है:
function isNumeric(a) {
if ($.isArray(a)) return false;
var b = a && a.toString();
a = a + "";
return b - parseFloat(b) + 1 >= 0 &&
!/^\s+|\s+$/g.test(a) &&
!isNaN(a) && !isNaN(parseFloat(a));
};
मैंने इनमें से किसी का भी बहुत परीक्षण नहीं किया है, अन्य उपयोगों की तुलना में मैन्युअल रूप से कुछ उपयोग-मामलों का परीक्षण कर रहा हूं, जो मैं अपने वर्तमान विधेय के साथ मार रहा हूं, जो सभी बहुत मानक सामान हैं। यह एक "स्टैंडिंग-ऑन-द-कंधों-ऑफ-दिग्गज" स्थिति है।
खैर, मैं इस एक का उपयोग कर रहा हूँ ...
यह अब तक काम कर रहा है:
function checkNumber(value) {
if ( value % 1 == 0 )
return true;
else
return false;
}
यदि आप इसके साथ कोई समस्या रखते हैं, तो कृपया मुझे बताएं।
return !isNaN(parseInt(value, 10));
अगर किसी को कभी भी यह दूर हो जाता है, तो मैंने कुछ समय हैक करने में बिताया। इस पल को पैच करने की कोशिश कर रहा था । ( https://github.com/moment/moment )। यहाँ कुछ है कि मैं इसे से दूर ले गया है:
function isNumeric(val) {
var _val = +val;
return (val !== val + 1) //infinity check
&& (_val === +val) //Cute coercion check
&& (typeof val !== 'object') //Array/object check
}
निम्नलिखित मामलों को संभालता है:
सच! :
isNumeric("1"))
isNumeric(1e10))
isNumeric(1E10))
isNumeric(+"6e4"))
isNumeric("1.2222"))
isNumeric("-1.2222"))
isNumeric("-1.222200000000000000"))
isNumeric("1.222200000000000000"))
isNumeric(1))
isNumeric(0))
isNumeric(-0))
isNumeric(1010010293029))
isNumeric(1.100393830000))
isNumeric(Math.LN2))
isNumeric(Math.PI))
isNumeric(5e10))
असत्य! :
isNumeric(NaN))
isNumeric(Infinity))
isNumeric(-Infinity))
isNumeric())
isNumeric(undefined))
isNumeric('[1,2,3]'))
isNumeric({a:1,b:2}))
isNumeric(null))
isNumeric([1]))
isNumeric(new Date()))
विडंबना यह है कि, मैं सबसे अधिक संघर्ष कर रहा हूँ:
isNumeric(new Number(1)) => false
किसी भी सुझाव का स्वागत करते हैं। :]
isNumeric(' ')
और क्या isNumeric('')
?
&& (val.replace(/\s/g,'') !== '') //Empty && (val.slice(-1) !== '.') //Decimal without Number
उपर्युक्त मुद्दे को स्वीकार करने के लिए जोड़ूंगा और एक मैं खुद था।
सादे जावास्क्रिप्ट का उपयोग करना:
Number.isNaN(Number('1')); // false
Number.isNaN(Number('asdf')); // true
लोडश का उपयोग करना:
_.isNaN(_.toNumber('1')); // false
_.isNaN(_.toNumber('asdf')); // true
function isNumberCandidate(s) {
const str = (''+ s).trim();
if (str.length === 0) return false;
return !isNaN(+str);
}
console.log(isNumberCandidate('1')); // true
console.log(isNumberCandidate('a')); // false
console.log(isNumberCandidate('000')); // true
console.log(isNumberCandidate('1a')); // false
console.log(isNumberCandidate('1e')); // false
console.log(isNumberCandidate('1e-1')); // true
console.log(isNumberCandidate('123.3')); // true
console.log(isNumberCandidate('')); // false
console.log(isNumberCandidate(' ')); // false
console.log(isNumberCandidate(1)); // true
console.log(isNumberCandidate(0)); // true
console.log(isNumberCandidate(NaN)); // false
console.log(isNumberCandidate(undefined)); // false
console.log(isNumberCandidate(null)); // false
console.log(isNumberCandidate(-1)); // true
console.log(isNumberCandidate('-1')); // true
console.log(isNumberCandidate('-1.2')); // true
console.log(isNumberCandidate(0.0000001)); // true
console.log(isNumberCandidate('0.0000001')); // true
console.log(isNumberCandidate(Infinity)); // true
console.log(isNumberCandidate(-Infinity)); // true
console.log(isNumberCandidate('Infinity')); // true
if (isNumberCandidate(s)) {
// use +s as a number
+s ...
}
हो सकता है कि यह कई बार फिर से शुरू किया गया हो, लेकिन मैं आज भी इससे लड़ता हूं और अपना जवाब पोस्ट करना चाहता हूं, क्योंकि मुझे ऐसा कोई अन्य जवाब नहीं मिला जो इसे बस या अच्छी तरह से करता हो:
var isNumeric = function(num){
return (typeof(num) === 'number' || typeof(num) === "string" && num.trim() !== '') && !isNaN(num);
}
const isNumeric = (num) => (typeof(num) === 'number' || typeof(num) === "string" && num.trim() !== '') && !isNaN(num);
const isNumeric = (num: any) => (typeof(num) === 'number' || typeof(num) === "string" && num.trim() !== '') && !isNaN(num as number);
यह काफी सरल लगता है और मैंने कई अन्य पदों पर देखे गए सभी ठिकानों को कवर किया है और खुद को समझा है:
// Positive Cases
console.log(0, isNumeric(0) === true);
console.log(1, isNumeric(1) === true);
console.log(1234567890, isNumeric(1234567890) === true);
console.log('1234567890', isNumeric('1234567890') === true);
console.log('0', isNumeric('0') === true);
console.log('1', isNumeric('1') === true);
console.log('1.1', isNumeric('1.1') === true);
console.log('-1', isNumeric('-1') === true);
console.log('-1.2354', isNumeric('-1.2354') === true);
console.log('-1234567890', isNumeric('-1234567890') === true);
console.log(-1, isNumeric(-1) === true);
console.log(-32.1, isNumeric(-32.1) === true);
console.log('0x1', isNumeric('0x1') === true); // Valid number in hex
// Negative Cases
console.log(true, isNumeric(true) === false);
console.log(false, isNumeric(false) === false);
console.log('1..1', isNumeric('1..1') === false);
console.log('1,1', isNumeric('1,1') === false);
console.log('-32.1.12', isNumeric('-32.1.12') === false);
console.log('[blank]', isNumeric('') === false);
console.log('[spaces]', isNumeric(' ') === false);
console.log('null', isNumeric(null) === false);
console.log('undefined', isNumeric(undefined) === false);
console.log([], isNumeric([]) === false);
console.log('NaN', isNumeric(NaN) === false);
आप भी अपनी कोशिश कर सकते हैं isNumeric
फ़ंक्शन और इन उपयोग के मामलों में बस अतीत और उन सभी के लिए "सही" के लिए स्कैन कर सकते हैं।
या, उन मूल्यों को देखने के लिए जिन्हें प्रत्येक वापस लौटाता है:
अक्सर, 'वैध संख्या' का मतलब NaN और Infinity को छोड़कर एक जावास्क्रिप्ट संख्या है, जिसका अर्थ है 'परिमित संख्या'।
किसी मान की संख्यात्मक वैधता की जाँच करने के लिए (उदाहरण के लिए किसी बाहरी स्रोत से), आप ESlint Airbnb शैली में परिभाषित कर सकते हैं:
/**
* Returns true if 'candidate' is a finite number or a string referring (not just 'including') a finite number
* To keep in mind:
* Number(true) = 1
* Number('') = 0
* Number(" 10 ") = 10
* !isNaN(true) = true
* parseFloat('10 a') = 10
*
* @param {?} candidate
* @return {boolean}
*/
function isReferringFiniteNumber(candidate) {
if (typeof (candidate) === 'number') return Number.isFinite(candidate);
if (typeof (candidate) === 'string') {
return (candidate.trim() !== '') && Number.isFinite(Number(candidate));
}
return false;
}
और इसे इस तरह से उपयोग करें:
if (isReferringFiniteNumber(theirValue)) {
myCheckedValue = Number(theirValue);
} else {
console.warn('The provided value doesn\'t refer to a finite number');
}
एक "अंतर्निहित" समाधान खोजने की कोशिश करने के लिए अपने आप को बचाएं।
वहाँ एक अच्छा जवाब नहीं है, और इस धागे में बेहद उत्कट उत्तर गलत है।
npm install is-number
जावास्क्रिप्ट में, यह हमेशा उतना सीधा नहीं होता है जितना कि एक संख्या होने पर मज़बूती से जांचना चाहिए। देवियों के लिए +, -, या नंबर () का उपयोग करके एक स्ट्रिंग मान को एक संख्या में डालना है (उदाहरण के लिए, जब मान उपयोगकर्ता इनपुट, रेगेक्स मैचों, पार्सर्स, आदि से लौटाए जाते हैं)। लेकिन कई गैर-सहज ज्ञान युक्त किनारे मामले हैं जो अप्रत्याशित परिणाम देते हैं:
console.log(+[]); //=> 0
console.log(+''); //=> 0
console.log(+' '); //=> 0
console.log(typeof NaN); //=> 'number'
मैंने हाल ही में एक वेरिएबल को सुनिश्चित करने के तरीकों के बारे में एक लेख लिखा है जो एक वैध संख्या है: https://github.com/jehugaleahsa/artifacts/blob/master/2018/typescript_num_hack.md लेख बताता है कि फ़्लोटिंग पॉइंट या पूर्णांक कैसे सुनिश्चित किया जाए, यदि महत्वपूर्ण ( +x
बनाम~~x
)।
लेख मानता है कि चर एक string
या number
शुरू करने के लिए है और trim
उपलब्ध / पॉलीफ़िल्ड है। अन्य प्रकारों को संभालने के लिए इसे बढ़ाना कठिन नहीं होगा। यहाँ इसका मांस है:
// Check for a valid float
if (x == null
|| ("" + x).trim() === ""
|| isNaN(+x)) {
return false; // not a float
}
// Check for a valid integer
if (x == null
|| ("" + x).trim() === ""
|| ~~x !== +x) {
return false; // not an integer
}
थोड़ा भ्रमित करने का मेरा प्रयास, फेरप्स सबसे अच्छा समाधान नहीं है
function isInt(a){
return a === ""+~~a
}
console.log(isInt('abcd')); // false
console.log(isInt('123a')); // false
console.log(isInt('1')); // true
console.log(isInt('0')); // true
console.log(isInt('-0')); // false
console.log(isInt('01')); // false
console.log(isInt('10')); // true
console.log(isInt('-1234567890')); // true
console.log(isInt(1234)); // false
console.log(isInt('123.4')); // false
console.log(isInt('')); // false
// other types then string returns false
console.log(isInt(5)); // false
console.log(isInt(undefined)); // false
console.log(isInt(null)); // false
console.log(isInt('0x1')); // false
console.log(isInt(Infinity)); // false
042
) और हेक्साडेसिमल ( 0x45f
)
मेरे आवेदन में हम केवल az AZ और 0-9 वर्णों की अनुमति दे रहे हैं। मैं का उपयोग कर "ऊपर जवाब मिला स्ट्रिंग % 1 === 0" में काम किया जब तक स्ट्रिंग 0xnn (0x10) की तरह के साथ शुरू हुआ और फिर इसे संख्यात्मक रूप में वापसी होगी जब हम यह नहीं करना चाहता था। मेरी सांख्यिक जाँच में निम्नलिखित सरल जाल हमारे विशिष्ट मामलों में चाल करते हैं।
function isStringNumeric(str_input){
//concat a temporary 1 during the modulus to keep a beginning hex switch combination from messing us up
//very simple and as long as special characters (non a-z A-Z 0-9) are trapped it is fine
return '1'.concat(str_input) % 1 === 0;}
चेतावनी : यह जावास्क्रिप्ट और एक्टेशनस्क्रिप्ट [संख्या ("1" + the_string)% 1 === 0) में एक लंबे समय तक चलने वाले बग का दोहन हो सकता है], मैं उसके लिए नहीं बोल सकता, लेकिन यह ठीक उसी तरह है जो हमें चाहिए था।
% 1
उन पर संख्यात्मक ऑपरेशन को लागू करके), और यह स्ट्रिंग को हेक्स या फ्लोट शाब्दिक के रूप में व्याख्या करेगा।
मेरा समाधान:
// returns true for positive ints;
// no scientific notation, hexadecimals or floating point dots
var isPositiveInt = function(str) {
var result = true, chr;
for (var i = 0, n = str.length; i < n; i++) {
chr = str.charAt(i);
if ((chr < "0" || chr > "9") && chr != ",") { //not digit or thousands separator
result = false;
break;
};
if (i == 0 && (chr == "0" || chr == ",")) { //should not start with 0 or ,
result = false;
break;
};
};
return result;
};
आप विशेष आवश्यकताओं को पूरा करने के लिए, लूप के अंदर अतिरिक्त शर्तें जोड़ सकते हैं।
आप स्थिर, संकलन समय की जाँच करने के लिए, प्रवाह लाइब्रेर वाई के साथ प्रकारों का उपयोग कर सकते हैं । बेशक उपयोगकर्ता इनपुट के लिए बहुत उपयोगी नहीं है।
// @flow
function acceptsNumber(value: number) {
// ...
}
acceptsNumber(42); // Works!
acceptsNumber(3.14); // Works!
acceptsNumber(NaN); // Works!
acceptsNumber(Infinity); // Works!
acceptsNumber("foo"); // Error!
यदि sNum
एक वैध संख्यात्मक मान है, तो यह जांचने के लिए यहां एक-लाइनर है ; विभिन्न प्रकार के इनपुट के लिए इसका परीक्षण किया गया है:
!isNaN(+s.replace(/\s|\$/g, '')); // returns True if numeric value
मैं निम्नलिखित का उपयोग कर रहा हूं:
const isNumber = s => !isNaN(+s)
1..1
, 1,1
, -32.1.12
, और अधिक महत्वपूर्ण विफल रहता है undefined
और NaN
। यदि आप उत्तीर्ण हुए हैं undefined
या NaN
यह कि यह एक संख्या है, तो यह कहकर आपको एक झूठी सकारात्मक लौटा देगा।