টাইপস্ক্রিপ্টে, স্ট্রিংটি সংখ্যাযুক্ত কিনা তা কীভাবে পরীক্ষা করবেন


184

টাইপস্ক্রিপ্টে, এটি isNaN কেবল সংখ্যার মান গ্রহণ করে বলে একটি ত্রুটি দেখায়

isNaN('9BX46B6A')

এবং এটি মিথ্যা প্রত্যাশা করে কারণ parseFloat('9BX46B6A')মূল্যায়ন করে9

isNaN(parseFloat('9BX46B6A'))

আমি ভিজ্যুয়াল স্টুডিওতে প্রদর্শিত ত্রুটিটি নিয়ে এখনও চালাতে পারি, তবে আমি এটি সঠিক উপায়ে করতে চাই।

বর্তমানে, আমি এই পরিবর্তিত ফাংশনটি লিখেছি -

static isNaNModified = (inputStr: string) => {
    var numericRepr = parseFloat(inputStr);
    return isNaN(numericRepr) || numericRepr.toString().length != inputStr.length;
}

উত্তর:


338

পথ একটি সংখ্যা একটি স্ট্রিং রূপান্তর করতে সাথে আছেন Number, না parseFloat।

Number('1234') // 1234
Number('9BX9') // NaN

আপনি যদি শর্টহ্যান্ড পছন্দ করেন তবে আপনি অ্যানারি প্লাস অপারেটরটিও ব্যবহার করতে পারেন:

+'1234' // 1234
+'9BX9' // NaN

NaN (অপারেটর বিরুদ্ধে পরীক্ষা করার সময় সতর্কতা অবলম্বন করুন ===এবং !==প্রত্যাশার মতো কাজ করবেন না NaN)। ব্যবহার করুন:

 isNaN(maybeNumber) // returns true if NaN, otherwise false

18
এর অর্থ কি এই হচ্ছে: যদি (isNaN (+ সম্ভবনিম্বারস্ট্রিং) চেক করার একটি কার্যকর উপায়?
— ম্যাথিজস সেগার্স

5
আপনি Numberউপরে parseIntবা কেন ব্যবহার করবেন parseFloat? Number('')0 parseInt('')প্রদান করে NaNযা দেয় যা আমি প্রত্যাশার সাথে সামঞ্জস্যপূর্ণ।
— দিদিই

6
মূল প্রশ্নে উল্লিখিত হিসাবে , parseInt('9BX9')(এবং parseFloat('9BX9')) ফিরে আসবে 9, না NaN। আপনি যদি খালি স্ট্রিংকে 0 এ রূপান্তর করতে না চান তবে প্রথমে খালি স্ট্রিংয়ের জন্য স্পষ্টত পরীক্ষা করুন।
— সি Snover

1
আপনি যদি এটি পরীক্ষা করতে চান তবে এর isNaN(Number(what_ever))পরিবর্তে ব্যবহার করুন Number(what_ever) === Nan।
— k0pernikus

3
@ সানটিমো কোনও টাইপস্ক্রিপ্ট Numberজিনিস নয়, এটি একটি অন্তর্নির্মিত ইকামাস্ক্রিপ্ট কনস্ট্রাক্টর ফাংশন যা কোনও মান গ্রহণ করে এবং কনস্ট্রাক্টরের পরিবর্তে ফাংশন হিসাবে ডাকা হলে একটি সংখ্যার আদিম ফিরিয়ে দেয়।
— সি Snover

46

আপডেট 2

Rxjs v6 এ আর এই পদ্ধতিটি উপলভ্য নয়

আমি ব্যবহার করে এটি মীমাংসিত করছি isNumeric থেকে অপারেটর rxjs লাইব্রেরী (আমদানি rxjs / util / isNumeric

হালনাগাদ

import { isNumeric } from 'rxjs/util/isNumeric';

। । ।

var val = "5700";
if (isNumeric(val)){
   alert("it is number !");
}

5
Rxjs v6 এ আর এই পদ্ধতিটি উপলভ্য নয়।
— লজিক 01



3

আমি একটি বিদ্যমান এবং ইতিমধ্যে পরীক্ষিত সমাধান চয়ন করব। টাইপস্ক্রিপ্টে rxjs থেকে উদাহরণস্বরূপ:

function isNumeric(val: any): val is number | string {
  // parseFloat NaNs numeric-cast false positives (null|true|false|"")
  // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
  // subtraction forces infinities to NaN
  // adding 1 corrects loss of precision from parseFloat (#15100)
  return !isArray(val) && (val - parseFloat(val) + 1) >= 0;
}

rxjs / isNumeric.ts

আরএক্সজেএস ব্যতীত অ্যারে () ফাংশন এবং সহজ সরল টাইপগুলি সহ:

function isNumeric(val: any): boolean {
  return !(val instanceof Array) && (val - parseFloat(val) + 1) >= 0;
}

আপনার ব্যবহারের ক্ষেত্রে আপনার এই জাতীয় ফাংশন সর্বদা পরীক্ষা করা উচিত। আপনার যদি বিশেষ মূল্য প্রকার থাকে তবে এই ফাংশনটি আপনার সমাধান নাও হতে পারে। আপনি এখানে ফাংশন পরীক্ষা করতে পারেন।

ফলাফলগুলি হ'ল:

enum         : CardTypes.Debit   : true
decimal      : 10                : true
hexaDecimal  : 0xf10b            : true
binary       : 0b110100          : true
octal        : 0o410             : true
stringNumber : '10'              : true

string       : 'Hello'           : false
undefined    : undefined         : false
null         : null              : false
function     : () => {}          : false
array        : [80, 85, 75]      : false
turple       : ['Kunal', 2018]   : false
object       : {}                : false

আপনি দেখতে পাচ্ছেন, আপনি সতর্কতা অবলম্বন করতে হবে, যদি আপনি এনামগুলি সহ এই ফাংশনটি ব্যবহার করেন।


1

বেশিরভাগ সময় আমরা যে মানটি যাচাই করতে চাই তা হ'ল স্ট্রিং বা সংখ্যা, তাই এখানে আমি ব্যবহার করি এটি ফাংশন:

const isNumber = (n: string | number): boolean => 
    !isNaN(parseFloat(String(n))) && isFinite(Number(n));

কোডস্যান্ডবক্স পরীক্ষা ।

const willBeTrue = [0.1, '1', '-1', 1, -1, 0, -0, '0', "-0", 2e2, 1e23, 1.1, -0.1, '0.1', '2e2', '1e23', '-0.1', ' 898', '080']

const willBeFalse = ['9BX46B6A', "+''", '', '-0,1', [], '123a', 'a', 'NaN', 1e10000, undefined, null, NaN, Infinity, () => {}]

1

আপনি Number.isFinite()ফাংশনটি ব্যবহার করতে পারেন :

Number.isFinite(Infinity);  // false
Number.isFinite(NaN);       // false
Number.isFinite(-Infinity); // false
Number.isFinite('0');       // false
Number.isFinite(null);      // false

Number.isFinite(0);         // true
Number.isFinite(2e64);      // true

দ্রষ্টব্য: গ্লোবাল ফাংশন isFinite()এবং পরবর্তীকালের মধ্যে একটি উল্লেখযোগ্য পার্থক্য রয়েছে Number.isFinite()। প্রাক্তনের ক্ষেত্রে, স্ট্রিং জবরদস্তি করা হয় - সুতরাং isFinite('0') === trueযখন Number.isFinite('0') === false।

এছাড়াও, নোট করুন যে এটি আইই তে উপলব্ধ নয়!


তবে ... TS2345: '1 'টাইপ করার যুক্তি' সংখ্যা 'টাইপের পরামিতিগুলিতে অর্পণযোগ্য নয়। এটি সংখ্যা.আইসফিনাইট (সংখ্যা ('0')) হওয়া দরকার;
— ম্যাকগ্রি

0

কৌণিক ক্ষেত্রে পূর্ণ সংখ্যা (নন-ফ্লোট) এর জন্য আপনি ব্যবহার করতে পারেন:

if (Number.isInteger(yourVariable)) { ... }


1
Number.isIntegerকেবল আপনাকে জানায় যে yourVariable, যা ইতিমধ্যে numberটাইপ, এটি একটি পূর্ণসংখ্যা হয়। স্ট্রিং দিয়ে কাজ করে না। সুতরাং, Number.isInteger(Number(yourVariable))কৌশলটি করতে পারে।
— টারবল

-2

কোনও স্ট্রিংকে সংখ্যা হিসাবে পার্স করা যায় কিনা তা রানটাইম উদ্বেগ। টাইপস্ক্রিপ্ট এই ব্যবহারের ক্ষেত্রে সমর্থন করে না কারণ এটি সংকলন সময় (রানটাইম নয়) সুরক্ষায় ফোকাস করা হয়েছে।


11
এটিকে একটি ত্রুটি হিসাবে চিহ্নিত করার পক্ষে এটি যথেষ্ট উদ্বেগের বিষয়, যেন এটি সঠিক নয় বলে প্রস্তাব করে।
— জেন পান্ডা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.