जांचें कि क्या स्ट्रिंग में केवल अंक हैं


324

मैं जांच करना चाहता हूं कि क्या stringकेवल अंक हैं। मैंने इसका उपयोग किया:

var isANumber = isNaN(theValue) === false;

if (isANumber){
    ..
}

लेकिन एहसास हुआ कि यह भी अनुमति देता है +और -। असल में, मैं यह सुनिश्चित करना चाहता हूं कि inputइसमें केवल अंक और कोई अन्य वर्ण न हों। चूंकि +100और -5दोनों संख्याएं हैं, isNaN()इसलिए जाने का सही तरीका नहीं है। शायद एक regexp मुझे क्या चाहिए? कोई सुझाव?

जवाबों:


644

कैसा रहेगा

var isnum = /^\d+$/.test(val);

1
यह भी खूब रही! मुझे लगता है कि दशमलव दशमलव के अंक के लिए उत्सुक नहीं है?
देवलवल्ड

5
@dewwwald: कुछ भाषाएं इसे अलग तरह से लागू करती हैं, लेकिन जावास्क्रिप्ट में, \dइसके बिल्कुल बराबर है [0-9]
Ry-

यहाँ आप प्रलेखन के बारे में पा सकते हैं कि कैसे Regular Expressionsकाम करते हैं
Danfoa

6
/^\d*$/इसके बजाय , यदि आपको एक खाली स्ट्रिंग मिलती है जिसमें केवल अंक होते हैं
Константин Ван

@DrorBar मुझे अपनी खराब अंग्रेजी के लिए खेद है और मुझे इसे फिर से लिखने दें: "यदि आप एक खाली स्ट्रिंग को केवल अंक होने पर विचार करते हैं ।"
Константин Ван


16
String.prototype.isNumber = function(){return /^\d+$/.test(this);}
console.log("123123".isNumber()); // outputs true
console.log("+12".isNumber()); // outputs false

2
पर विचार - यह (भविष्य ECMA संस्करणों में कम से कम आश्चर्य की बात है के सिद्धांत, और संभावित टकराव) में निर्मित वस्तुओं के प्रोटोटाइप को संशोधित करने के लिए जावास्क्रिप्ट में बुरा व्यवहार माना जाता है isNumber = () => /^\d+$/.test(this);बजाय के रूप में उपयोग करते हैं, औरconsole.log(isNumber("123123));
निक बुल

2
FWIW, 2009 में जब यह जवाब पोस्ट किया गया था, तब भी इसे एक बुरा अभ्यास नहीं माना गया था। कई jQuery के प्रतियोगी जो पहले मौजूद थे, jQuery के बाहर जीतने के लिए अभी तक था, सभी ने प्रोटोटाइप एक्सटेंशन का अभ्यास किया।
बालूप्टन

14

यदि आप फ्लोट वैल्यू के लिए समर्थन भी करना चाहते हैं (अलग-अलग मूल्यों को डॉट करें) तो आप इस एक्सप्रेशन का उपयोग कर सकते हैं:

var isNumber = /^\d+\.\d+$/.test(value);

हालाँकि, यदि आप फ्लोट का उपयोग नहीं करते हैं, लेकिन यह गलत है कि शायद ""? के बाद "। \" ने हल किया। मैं इस /^\d+[\.,\,]?\d+$/.test(value सुझाव है) दोनों अल्पविराम और बिंदु दशमलव अनुमति देने के लिए (जो बाद में हो सकता है बात करने के लिए अल्पविराम बदल सकता है)
Lucke

@ लुके, आपके द्वारा सुझाया गया रेगेक्स केवल एक दशमलव के साथ संख्याओं को खोजने में सक्षम होगा या 9. से अधिक होगा। यदि आप पहले \d+को बदलते हैं \d*?, तो यह 0 - 9 से मेल कर सकेगा, साथ ही .333
गस्ट वैन

5
पास: var isNumber = /^\d*\.?\d+$/.test(value)- '3.5', '.5', '3' से मेल खाता है - '3.' से मेल नहीं खाता
पीटर हॉलिंगवर्थ

7

यह जांचने के लिए एक और दिलचस्प, पठनीय तरीका है कि क्या किसी स्ट्रिंग में केवल अंक हैं।

यह विधि प्रसार ऑपरेटर का उपयोग करके स्ट्रिंग को एक सरणी में विभाजित करके काम करती है , और फिर every()यह जांचने के लिए विधि का उपयोग करती है कि क्या सरणी के सभी तत्व (वर्ण) अंकों की स्ट्रिंग में शामिल हैं'0123456789' :

const digits_only = string => [...string].every(c => '0123456789'.includes(c));

console.log(digits_only('123')); // true
console.log(digits_only('+123')); // false
console.log(digits_only('-123')); // false
console.log(digits_only('123.')); // false
console.log(digits_only('.123')); // false
console.log(digits_only('123.0')); // false
console.log(digits_only('0.123')); // false
console.log(digits_only('Hello, world!')); // false


1
यह trueखाली स्ट्रिंग '', और एक खाली सरणी [], पूर्णांक की एक सरणी [1, 2, 3](एक बार वे <10) के लिए भी वापस आ जाएगी । /^\d+$/मुझे लगता है कि मूल नियमित अभिव्यक्ति की तुलना में कीड़े / दुरुपयोग का खतरा अधिक है
Drenai


5

यहाँ नियमित अभिव्यक्ति का उपयोग किए बिना एक समाधान है:

function onlyDigits(s) {
  for (let i = s.length - 1; i >= 0; i--) {
    const d = s.charCodeAt(i);
    if (d < 48 || d > 57) return false
  }
  return true
}

जहां 48 और 57 क्रमशः "0" और "9" के लिए चार कोड हैं।




1

यदि आप फ्लोट मान शामिल करना चाहते हैं, तो आप निम्न कोड का उपयोग कर सकते हैं

theValue=$('#balanceinput').val();
var isnum1 = /^\d*\.?\d+$/.test(theValue);
var isnum2 =  /^\d*\.?\d+$/.test(theValue.split("").reverse().join(""));
alert(isnum1+' '+isnum2);

यह केवल 'और' के साथ अलग किए गए अंकों के लिए परीक्षण करेगा। ' पहला परीक्षण मानों को कवर करेगा जैसे कि 0.1 और 0 लेकिन साथ ही .1, यह 0. की अनुमति नहीं देगा। इसलिए मैं जो प्रस्ताव देता हूं उसका समाधान है .Value को उल्टा करना है ।1 1. होगा। फिर वही नियमित अभिव्यक्ति इसकी अनुमति नहीं देगा।

उदाहरण :

 theValue=3.4; //isnum1=true , isnum2=true 
theValue=.4; //isnum1=true , isnum2=false 
theValue=3.; //isnum1=flase , isnum2=true 

-1
c="123".match(/\D/) == null #true
c="a12".match(/\D/) == null #false

यदि एक स्ट्रिंग में केवल अंक होते हैं तो यह अशक्त हो जाएगी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.