আমার যাচাই করা উচিত 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)তবে এটি আরও ভাল সমাধান হতে পারে। তবে যাইহোক, এটি প্রশ্ন ছিল না :)
সম্পাদনা: ব্লেন্ডারের আপডেট হওয়া উত্তরটি এখানে সঠিক উত্তর যদি আপনি কেবল একটি একক অক্ষর পরীক্ষা করে থাকেন (যথা: ly !isNaN(parseInt(c, 10)) ) । আপনি যদি পুরো স্ট্রিং পরীক্ষা করতে চান তবে নীচের আমার উত্তরটি একটি ভাল সমাধান।
এখানে jQuery এর isNumericবাস্তবায়ন (খাঁটি জাভাস্ক্রিপ্টে) রয়েছে, যা সম্পূর্ণ স্ট্রিংয়ের বিরুদ্ধে কাজ করে :
function isNumeric(s) {
return !isNaN(s - parseFloat(s));
}
এই ফাংশনটির জন্য মন্তব্যটি পড়ে:
// parseFloat NaNs সাংখ্যিক-নিক্ষিপ্ত মিথ্যা ধনাত্মক (নাল | সত্য | মিথ্যা | "")
// ... তবে শীর্ষস্থানীয় সংখ্যাগুলির স্ট্রিংগুলি, বিশেষত হেক্স
আক্ষরিক ("0x ...") এর বিয়োগফল ব্যাখ্যা করে // বিয়োগফলগুলি এনএএন-তে অসম্পূর্ণতা জোর করে
আমি মনে করি আমরা বিশ্বাস করতে পারি যে এই চ্যাপগুলি এতে বেশ কিছুটা সময় ব্যয় করেছে!
আমি ভাবছি কেন কেউ এর মতো সমাধান পোস্ট করেন নি:
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"(এবং অ্যারেগুলিতে পাওয়া অন্যান্য বৈশিষ্ট্যগুলি) অঙ্কগুলি: পি
আমি মনে করি এটি সমাধানের উপায়গুলি নিয়ে আসা খুব মজাদার। নীচে কিছু।
(নীচের সমস্ত ফাংশন ধরে নিলে যুক্তি একটি একক অক্ষর to এ পরিবর্তন করুনn[0] enforce এটি প্রয়োগে )
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);
}
আপনি এটি চেষ্টা করতে পারেন (আমার ক্ষেত্রে কাজ করেছেন)
যদি আপনি পরীক্ষা করতে চান যে কোনও স্ট্রিংয়ের প্রথম চরটি কোনও আন্ত:
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
}