मुझे यह जाँचने की आवश्यकता है कि क्या justPrices[i].substr(commapos+2,1)।
स्ट्रिंग कुछ इस तरह है: "ब्लाब्ला, 120"
इस मामले में यह जाँच करेगा कि क्या '0' एक संख्या है। यह कैसे किया जा सकता है?
मुझे यह जाँचने की आवश्यकता है कि क्या justPrices[i].substr(commapos+2,1)।
स्ट्रिंग कुछ इस तरह है: "ब्लाब्ला, 120"
इस मामले में यह जाँच करेगा कि क्या '0' एक संख्या है। यह कैसे किया जा सकता है?
जवाबों:
आप तुलना संचालकों का उपयोग यह देखने के लिए कर सकते हैं कि यह अंक वर्णों की सीमा में है:
var c = justPrices[i].substr(commapos+2,1);
if (c >= '0' && c <= '9') {
// it is a number
} else {
// it isn't
}
आप या तो उपयोग कर सकते हैं parseIntऔर के साथ की जाँच करेंisNaN
या यदि आप सीधे अपने स्ट्रिंग पर काम करना चाहते हैं तो आप इस तरह से रीजैक्स का उपयोग कर सकते हैं:
function is_numeric(str){
return /^\d+$/.test(str);
}
function is_numeric_char(c) { return /\d/.test(c); }
is_numeric_char("foo1bar") == true) से अधिक है। यदि आप एक संख्यात्मक चार के लिए जाँच करना चाहते /^\d$/.test(c)हैं एक बेहतर समाधान होगा। लेकिन वैसे भी, यह सवाल नहीं था :)
संपादित करें: यदि आप सिर्फ एक चरित्र (अर्थात् !isNaN(parseInt(c, 10))) की जाँच कर रहे हैं तो ब्लेंडर का अद्यतन उत्तर यहां सही उत्तर है । यदि आप पूरे तार का परीक्षण करना चाहते हैं तो मेरा उत्तर नीचे एक अच्छा समाधान है।
यहाँ jQuery का isNumericकार्यान्वयन (शुद्ध जावास्क्रिप्ट में) है, जो पूर्ण स्ट्रिंग्स के खिलाफ काम करता है :
function isNumeric(s) {
return !isNaN(s - parseFloat(s));
}
इस समारोह के लिए टिप्पणी पढ़ता है:
// parseFloat NaNs न्यूमेरिक-कास्ट झूठी सकारात्मक (null | सच | गलत | "")
// ... लेकिन अग्रणी संख्याओं की गलत व्याख्या करता है, विशेष रूप से हेक्स शाब्दिक ("0x ...")
// घटाव NaN को बल देता है।
मुझे लगता है कि हम भरोसा कर सकते हैं कि इन चैप्स ने इस पर काफी समय बिताया है!
मुझे आश्चर्य है कि किसी ने भी इस तरह से समाधान क्यों पोस्ट नहीं किया है:
var charCodeZero = "0".charCodeAt(0);
var charCodeNine = "9".charCodeAt(0);
function isDigitCode(n) {
return(n >= charCodeZero && n <= charCodeNine);
}
आह्वान के साथ जैसे:
if (isDigitCode(justPrices[i].charCodeAt(commapos+2))) {
... // digit
} else {
... // not a digit
}
आप इसका उपयोग कर सकते हैं:
function isDigit(n) {
return Boolean([true, true, true, true, true, true, true, true, true, true][n]);
}
यहाँ, मैंने इसे स्वीकृत विधि से तुलना की: http://jsperf.com/isdigittest/5 । मुझे बहुत उम्मीद नहीं थी, इसलिए मैं बहुत आश्चर्यचकित था, जब मुझे पता चला कि स्वीकृत पद्धति बहुत धीमी थी।
दिलचस्प बात यह है कि, जबकि स्वीकृत विधि तेजी से सही इनपुट है (उदाहरण के लिए। '5') और गलत के लिए धीमे (जैसे। 'ए'), मेरा तरीका बिल्कुल विपरीत है (गलत के लिए तेज और सही के लिए धीमा)।
फिर भी, सबसे खराब स्थिति में, मेरी विधि सही इनपुट के लिए स्वीकृत समाधान की तुलना में 2 गुना तेज है और गलत इनपुट के लिए 5 गुना अधिक तेज है।
!!([!0, !0, !0, !0, !0, !0, !0, !0, !0, !0][n]);इसमें महान डब्ल्यूटीएफ क्षमता है और यह काफी अच्छी तरह से काम करता है (विफल रहता है 007)।
"length"(और सरणियों पर पाए जाने वाले अन्य गुण) अंक हैं: P
मुझे लगता है कि इसे हल करने के तरीकों के साथ आना बहुत मजेदार है। नीचे कुछ हैं।
(नीचे सभी कार्यों मान तर्क एक भी चरित्र है। को बदलें n[0]यह लागू करने के लिए)
function isCharDigit(n){
return !!n.trim() && n > -1;
}
function isCharDigit(n){
return !!n.trim() && n*0==0;
}
function isCharDigit(n){
return !!n.trim() && !!Number(n+.1); // "+.1' to make it work with "." and "0" Chars
}
var isCharDigit = (function(){
var a = [1,1,1,1,1,1,1,1,1,1];
return function(n){
return !!a[n] // check if `a` Array has anything in index 'n'. Cast result to boolean
}
})();
function isCharDigit(n){
return !!n.trim() && !isNaN(+n);
}
var str = ' 90ABcd#?:.+', char;
for( char of str )
console.log( char, isCharDigit(char) );
trueके लिए " "।
charCodeAt()तुलना जोड़ी - जो लगभग 4x तेज थी - jsperf.com/isdigit3
साधारण कार्य
function isCharNumber(c){
return c >= '0' && c <= '9';
}
मैं एक सरल रेगीज़ का सुझाव देता हूं।
यदि आप स्ट्रिंग में बस अंतिम वर्ण की तलाश कर रहे हैं:
/^.*?[0-9]$/.test("blabla,120"); // true
/^.*?[0-9]$/.test("blabla,120a"); // false
/^.*?[0-9]$/.test("120"); // true
/^.*?[0-9]$/.test(120); // true
/^.*?[0-9]$/.test(undefined); // false
/^.*?[0-9]$/.test(-1); // true
/^.*?[0-9]$/.test("-1"); // true
/^.*?[0-9]$/.test(false); // false
/^.*?[0-9]$/.test(true); // false
और रेगेक्स और भी सरल है यदि आप एक इनपुट के रूप में केवल एक चार की जाँच कर रहे हैं:
var char = "0";
/^[0-9]$/.test(char); // true
सबसे छोटा समाधान है:
const isCharDigit = n => n < 10;
आप इन्हें भी लागू कर सकते हैं:
const isCharDigit = n => Boolean(++n);
const isCharDigit = n => '/' < n && n < ':';
const isCharDigit = n => !!++n;
यदि आप 1 से अधिक चैट बैक्टीरिया की जांच करना चाहते हैं, तो आप अगले वेरिएंट का उपयोग कर सकते हैं
नियमित अभिव्यक्ति:
const isDigit = n => /\d+/.test(n);
तुलना:
const isDigit = n => +n == n;
जांचें कि क्या यह NaN नहीं है
const isDigit = n => !isNaN(n);
isNumber = function(obj, strict) {
var strict = strict === true ? true : false;
if (strict) {
return !isNaN(obj) && obj instanceof Number ? true : false;
} else {
return !isNaN(obj - parseFloat(obj));
}
}
सख्त मोड के बिना आउटपुट:
var num = 14;
var textnum = '14';
var text = 'yo';
var nan = NaN;
isNumber(num);
isNumber(textnum);
isNumber(text);
isNumber(nan);
true
true
false
false
सख्त मोड के साथ आउटपुट:
var num = 14;
var textnum = '14';
var text = 'yo';
var nan = NaN;
isNumber(num, true);
isNumber(textnum, true);
isNumber(text, true);
isNumber(nan);
true
false
false
false
यह काम करने लगता है:
स्थिर बंधन:
String.isNumeric = function (value) {
return !isNaN(String(value) * 1);
};
प्रोटोटाइप बाइंडिंग:
String.prototype.isNumeric = function () {
return !isNaN(this.valueOf() * 1);
};
यह एकल वर्णों के साथ-साथ संपूर्ण स्ट्रिंग्स की जांच करेगा कि क्या वे संख्यात्मक हैं।
function is_numeric(mixed_var) {
return (typeof(mixed_var) === 'number' || typeof(mixed_var) === 'string') &&
mixed_var !== '' && !isNaN(mixed_var);
}
आप यह कोशिश कर सकते हैं (मेरे मामले में काम किया)
यदि आप परीक्षण करना चाहते हैं कि क्या स्ट्रिंग का पहला चार्ट एक int है:
if (parseInt(YOUR_STRING.slice(0, 1))) {
alert("first char is int")
} else {
alert("first char is not int")
}
यदि आप परीक्षण करना चाहते हैं कि क्या चार इंट एक है:
if (parseInt(YOUR_CHAR)) {
alert("first char is int")
} else {
alert("first char is not int")
}
यह फ़ंक्शन उन सभी परीक्षण मामलों के लिए काम करता है जो मुझे मिल सकते हैं। यह इससे भी तेज है:
function isNumeric (n) {
if (!isNaN(parseFloat(n)) && isFinite(n) && !hasLeading0s(n)) {
return true;
}
var _n = +n;
return _n === Infinity || _n === -Infinity;
}
var isIntegerTest = /^\d+$/;
var isDigitArray = [!0, !0, !0, !0, !0, !0, !0, !0, !0, !0];
function hasLeading0s(s) {
return !(typeof s !== 'string' ||
s.length < 2 ||
s[0] !== '0' ||
!isDigitArray[s[1]] ||
isIntegerTest.test(s));
}
var isWhiteSpaceTest = /\s/;
function fIsNaN(n) {
return !(n <= 0) && !(n > 0);
}
function isNumber(s) {
var t = typeof s;
if (t === 'number') {
return (s <= 0) || (s > 0);
} else if (t === 'string') {
var n = +s;
return !(fIsNaN(n) || hasLeading0s(s) || !(n !== 0 || !(s === '' || isWhiteSpaceTest.test(s))));
} else if (t === 'object') {
return !(!(s instanceof Number) || fIsNaN(+s));
}
return false;
}
function testRunner(IsNumeric) {
var total = 0;
var passed = 0;
var failedTests = [];
function test(value, result) {
total++;
if (IsNumeric(value) === result) {
passed++;
} else {
failedTests.push({
value: value,
expected: result
});
}
}
// true
test(0, true);
test(1, true);
test(-1, true);
test(Infinity, true);
test('Infinity', true);
test(-Infinity, true);
test('-Infinity', true);
test(1.1, true);
test(-0.12e-34, true);
test(8e5, true);
test('1', true);
test('0', true);
test('-1', true);
test('1.1', true);
test('11.112', true);
test('.1', true);
test('.12e34', true);
test('-.12e34', true);
test('.12e-34', true);
test('-.12e-34', true);
test('8e5', true);
test('0x89f', true);
test('00', true);
test('01', true);
test('10', true);
test('0e1', true);
test('0e01', true);
test('.0', true);
test('0.', true);
test('.0e1', true);
test('0.e1', true);
test('0.e00', true);
test('0xf', true);
test('0Xf', true);
test(Date.now(), true);
test(new Number(0), true);
test(new Number(1e3), true);
test(new Number(0.1234), true);
test(new Number(Infinity), true);
test(new Number(-Infinity), true);
// false
test('', false);
test(' ', false);
test(false, false);
test('false', false);
test(true, false);
test('true', false);
test('99,999', false);
test('#abcdef', false);
test('1.2.3', false);
test('blah', false);
test('\t\t', false);
test('\n\r', false);
test('\r', false);
test(NaN, false);
test('NaN', false);
test(null, false);
test('null', false);
test(new Date(), false);
test({}, false);
test([], false);
test(new Int8Array(), false);
test(new Uint8Array(), false);
test(new Uint8ClampedArray(), false);
test(new Int16Array(), false);
test(new Uint16Array(), false);
test(new Int32Array(), false);
test(new Uint32Array(), false);
test(new BigInt64Array(), false);
test(new BigUint64Array(), false);
test(new Float32Array(), false);
test(new Float64Array(), false);
test('.e0', false);
test('.', false);
test('00e1', false);
test('01e1', false);
test('00.0', false);
test('01.05', false);
test('00x0', false);
test(new Number(NaN), false);
test(new Number('abc'), false);
console.log('Passed ' + passed + ' of ' + total + ' tests.');
if (failedTests.length > 0) console.log({
failedTests: failedTests
});
}
testRunner(isNumber)
जहाँ तक मुझे पता है, सबसे आसान तरीका सिर्फ इसके द्वारा गुणा करना है 1:
var character = ... ; // your character
var isDigit = ! isNaN(character * 1);
एक से गुणा करना किसी भी संख्यात्मक स्ट्रिंग से एक संख्या बनाता है (जैसा कि आपके पास केवल एक वर्ण है यह हमेशा 0 से 9 तक पूर्णांक होगा) और NaNकिसी भी अन्य स्ट्रिंग के लिए।
उपरोक्त उत्तरों में से एक के समान, मैंने उपयोग किया
var sum = 0; //some value
let num = parseInt(val); //or just Number.parseInt
if(!isNaN(num)) {
sum += num;
}
यह ब्लॉग इस चेक पर कुछ और प्रकाश डालता है अगर कोई जावास्क्रिप्ट में एक स्ट्रिंग है टाइपस्क्रिप्ट और ES6
भाषा के गतिशील प्रकार की जाँच का लाभ उठाकर एक सरल उपाय:
function isNumber (string) {
//it has whitespace
if(string === ' '.repeat(string.length)){
return false
}
return string - 0 === string * 1
}
नीचे परीक्षण के मामले देखें
महज प्रयोग करें isFinite
const number = "1";
if (isFinite(number)) {
// do something
}