আমি আশা করছি পুরানো ভিবি 6 IsNumeric()
ফাংশনের মতো একই ধারণামূলক জায়গাতে কিছু আছে ?
isNaN("")
, isNaN(" ")
, isNaN(false)
, ইত্যাদিতে আয় false
এই জন্য, implying যে, তারা নম্বর আছে।
আমি আশা করছি পুরানো ভিবি 6 IsNumeric()
ফাংশনের মতো একই ধারণামূলক জায়গাতে কিছু আছে ?
isNaN("")
, isNaN(" ")
, isNaN(false)
, ইত্যাদিতে আয় false
এই জন্য, implying যে, তারা নম্বর আছে।
উত্তর:
পরিবর্তনশীল সামগ্রীটি স্ট্রিং বা সংখ্যা কিনা তা বিবেচনা ছাড়াই এটি কাজ করে।
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
"ভেরিয়েবলটি সংখ্যা নয় কিনা তা পরীক্ষা করতে" ব্যবহার করতে পারবেন না । "একটি সংখ্যা নয়" "আইইইই -794 নাএন" সমান নয়, যা এটি isNaN
পরীক্ষা করে। বিশেষত, বুলেট এবং খালি স্ট্রিংগুলি পরীক্ষা করার সময় এই ব্যবহার ব্যর্থ হয়। বিকাশকারী.মোজিলা.অর্গ.ইন- ইউএস / ডকস / ওয়েব / জাভা স্ক্রিপ্ট / রেফারেন্স / See দেখুন ।
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- এ যেতে পারেন:
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
}
যদি আপনি কেবল স্ট্রিংটি পুরো সংখ্যা (দশমিক কোনও স্থান নয়) তা খতিয়ে দেখার চেষ্টা করছেন, রেজেক্স একটি ভাল উপায়। অন্যান্য পদ্ধতি যেমন 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 এর সাথে সমান হলে এই ফাংশনটি সত্য করে। অন্যথায় এটি মিথ্যা প্রত্যাবর্তন করে।
এই ফাংশনটি সংখ্যা নির্দিষ্ট সংখ্যা.আইএসএনএএন () পদ্ধতি থেকে পৃথক।
গ্লোবাল isNaN () ফাংশন, পরীক্ষিত মানকে একটি সংখ্যায় রূপান্তর করে, তারপরে এটি পরীক্ষা করে।
সংখ্যা.আইসনান () মানগুলিকে একটি সংখ্যায় রূপান্তর করে না এবং সংখ্যার ধরণের নয় এমন কোনও মানের জন্য সত্য ফিরে পাবে না ...
isNaN()
ফেরত দেয় । false
পুরানো প্রশ্ন, তবে প্রদত্ত উত্তরে বেশ কয়েকটি পয়েন্ট নিখোঁজ রয়েছে।
বৈজ্ঞানিক স্বরলিপি.
!isNaN('1e+30')
হয় true
, তবে বেশিরভাগ ক্ষেত্রে যখন মানুষ সংখ্যার জন্য জিজ্ঞাসা, তারা ভালো জিনিস মেলে না চান 1e+30
।
বড় ভাসমান সংখ্যাগুলি অদ্ভুত আচরণ করতে পারে
পর্যবেক্ষণ (নোড.জেএস ব্যবহার করে):
> 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 /, নাল, "", সত্য, মিথ্যা, [] (এবং অন্যদের?) এর জন্য বিশেষ পরিচালনা সহ
এর নির্মাণকারীর কাছে কোনও যুক্তি পাস করার সময় আপনি সংখ্যার ফলাফলটি ব্যবহার করতে পারেন ।
যদি আর্গুমেন্ট (একটি স্ট্রিং) একটি সংখ্যায় রূপান্তর করা যায় না, এটি NaN প্রদান করে, তাই আপনি নির্ধারণ করতে পারবেন যে স্ট্রিংটি একটি বৈধ সংখ্যা ছিল কিনা or
দ্রষ্টব্য: নোট যখন খালি স্ট্রিং বা ক্ষণস্থায়ী '\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
। এটি অত্যন্ত বাছাইযুক্ত - এই পরীক্ষায় উত্তীর্ণ হওয়ার জন্য স্ট্রিংটির অবশ্যই সংখ্যার " সবচেয়ে সংক্ষিপ্ততম নিখুঁত ফর্ম " এর সাথে মিল থাকতে হবে।
এটি একটি সংখ্যায় স্ট্রিং কাস্ট করতে পুনরায় String
এবং Number
কন্সট্রাক্টর ব্যবহার করে এবং জাভাস্ক্রিপ্ট ইঞ্জিনের "নিখুঁত নূন্যতম ফর্ম" (এটি প্রাথমিকের সাথে রূপান্তরিত হয়েছে কিনা) তা পরীক্ষা করেNumber
কনস্ট্রাক্টরের ) মূল স্ট্রিংয়ের সাথে মেলে কিনা তা পরীক্ষা করে।
(str === String(Math.round(Number(str))))
।
"Infinity"
, "-Infinity"
এবং "NaN"
এই পরীক্ষাটি পাস। তবে এটি একটি অতিরিক্ত Number.isFinite
পরীক্ষা ব্যবহার করে স্থির করা যেতে পারে ।
str === ("" + +str)
। এটি মূলত যাচাই করে যে স্ট্রিংটি কোনও জেএস নম্বরকে স্ট্রিংফাই করার ফলাফল কিনা। এটি জানার পরে আমরা একটি সমস্যাও দেখতে পাচ্ছি: পরীক্ষার জন্য পাস হয় 0.000001
তবে ব্যর্থ হয় 0.0000001
যা 1e-7
পরিবর্তে পাস করলে হয়। খুব বড় সংখ্যার জন্য একই।
parseInt (), তবে সচেতন থাকুন যে এই ফাংশনটি এই অর্থে কিছুটা পৃথক যে উদাহরণস্বরূপ এটি পার্সিয়ান্ট ("100px") এর জন্য 100 প্রদান করে।
parseInt(09)
।
paraseInt(09, 10)
, 10
যুক্তির দরকার নেই । parseInt('09')
এখন 9 এর সমান
উদ্ধৃতি:
isNaN (num) // সত্যটি ফেরত দেয় যদি ভেরিয়েবলটিতে একটি বৈধ সংখ্যা না থাকে
আপনি যদি শীর্ষস্থানীয় / চলমান স্থানগুলি পরীক্ষা করার প্রয়োজন হয় তবে এটি পুরোপুরি সত্য নয় - উদাহরণস্বরূপ যখন নির্দিষ্ট পরিমাণের অঙ্কের প্রয়োজন হয় এবং আপনাকে একটি পিনের জন্য '1111' বা '111' নয়, বলার দরকার পড়ে get ইনপুট.
ব্যবহার করা ভাল:
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;
};
মাইকেল এই জাতীয় পরামর্শ দিয়েছিল (যদিও আমি "ব্যবহারকারী1691651 - জন" এর পরিবর্তিত সংস্করণটি এখানে চুরি করেছি):
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));
};
আমি এর খুব একটাও পরীক্ষা করিনি, আমি কয়েকটি ব্যবহারের ক্ষেত্রে নিজেই পরীক্ষা করার পরিবর্তে আমার বর্তমান পরিস্থিতি নিয়ে যাচ্ছি যা হ'ল সব স্ট্যান্ডার্ড স্টাফ। এটি একটি "দৈত্যের কাঁধে দাঁড়ানো" পরিস্থিতি।
এটি টাইপস্ক্রিপ্টের জন্য বৈধ নয়:
declare function isNaN(number: number): boolean;
টাইপস্ক্রিপ্টের জন্য আপনি ব্যবহার করতে পারেন:
/^\d+$/.test(key)
ঠিক আছে, আমি নিজের তৈরি এটি ব্যবহার করছি ...
এটি এতক্ষণ কাজ করে চলেছে:
function checkNumber(value) {
if ( value % 1 == 0 )
return true;
else
return false;
}
আপনি যদি এটির সাথে কোনও সমস্যা মনে করেন তবে আমাকে বলুন, দয়া করে।
return !isNaN(parseInt(value, 10));
যদি কেউ কখনও এটিকে কমিয়ে দেয় তবে আমি এই মুহুর্তে প্যাচ দেওয়ার চেষ্টা করে কিছু সময় ব্যয় করেছি htt ( 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
ফাংশনটিও চেষ্টা করতে পারেন এবং এই ব্যবহারের ক্ষেত্রে কেবল অতীত হয়ে যেতে পারেন এবং তাদের সবার জন্য "সত্য" জন্য স্ক্যান করতে পারেন।
অথবা, প্রতিটি যে মানগুলি দেখায় তা দেখতে:
প্রায়শই, 'বৈধ সংখ্যা' এর অর্থ জাভাস্ক্রিপ্ট নম্বর এনএএন এবং ইনফিনিটি বাদে, অর্থাত্ একটি 'সীমাবদ্ধ নম্বর'।
কোনও মানের সংখ্যার বৈধতা পরীক্ষা করতে (উদাহরণস্বরূপ বাহ্যিক উত্স থেকে), আপনি 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');
}
একটি "অন্তর্নির্মিত" সমাধান সন্ধান করার চেষ্টা করার মাথা ব্যথা নিজেকে বাঁচান।
একটি ভাল উত্তর নেই, এবং এই থ্রেডে প্রচুর upvated উত্তর ভুল।
npm install is-number
জাভাস্ক্রিপ্টে, এটি সর্বদা সহজ সরল নয় যতটা নির্ভরযোগ্যভাবে পরীক্ষা করা উচিত যে কোনও মান একটি সংখ্যা কিনা। ডেভসের পক্ষে +, -, বা সংখ্যা () ব্যবহার করে কোনও সংখ্যায় স্ট্রিংয়ের মান castালাই করা সাধারণ (উদাহরণস্বরূপ, যখন ব্যবহারকারীদের ইনপুট থেকে রেগেক্স ম্যাচগুলি, পার্সার ইত্যাদি) ফিরে আসে) তবে এমন অনেকগুলি স্ব-স্বজ্ঞাত প্রবণতা রয়েছে যা অপ্রত্যাশিত ফলাফল দেয়:
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
)
আমার অ্যাপ্লিকেশনটিতে আমরা কেবল এজেড এবং 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
এটি যে এটি আপনাকে একটি মিথ্যা ধনাত্মক বলে ফিরিয়ে দেবে এটি একটি সংখ্যা।