জাভাস্ক্রিপ্টে ভেরিয়েবল নম্বর বা স্ট্রিং কিনা তা পরীক্ষা করুন


464

কেউ কি জানেন যে আমি কীভাবে জাভাস্ক্রিপ্টের একটি ভেরিয়েবলের সংখ্যা বা স্ট্রিং কিনা তা পরীক্ষা করে দেখতে পারি?



উত্তর:


442

আপনি যদি আক্ষরিক স্বরলিপি ব্যবহার করছেন এবং নির্মাণকারীদের সাথে নয়, আপনি টাইপফ ব্যবহার করতে পারেন :

typeof "Hello World"; // string
typeof 123;           // number

যদি আপনি কোনও কনস্ট্রাক্টরের মাধ্যমে সংখ্যা এবং স্ট্রিং তৈরি করে থাকেন তবে আপনার মনে var foo = new String("foo")রাখা উচিত যে typeofএটির objectজন্য ফিরে আসতে পারে foo

আন্ডারস্কোর.জেজে পাওয়া পদ্ধতিটি (এন্ডোটেটেড উত্সটি এখানে পাওয়া যেতে পারে ) ব্যবহার করার জন্য সম্ভবত এই ধরণের পরীক্ষার আরও বোকা পদ্ধতি হ'ল ,

var toString = Object.prototype.toString;

_.isString = function (obj) {
  return toString.call(obj) == '[object String]';
}

এটি trueনিম্নলিখিতগুলির জন্য একটি বুলিয়ান প্রদান করে:

_.isString("Jonathan"); // true
_.isString(new String("Jonathan")); // true

69
যা যথাক্রমে "স্ট্রিং" এবং "সংখ্যা" বলে
থিলো

27
এটা ঠিক নয়! একটি স্ট্রিংয়ের দুটি সম্ভাব্য উপস্থাপনা রয়েছে। সতর্কতা (নতুন স্ট্রিং (টাইপফ)) "অবজেক্ট" আউটপুট দেবে। সবচেয়ে খারাপ বিষয়, জাভাস্ক্রিপ্ট মাঝে মাঝে অপ্টিমাইজেশনের উদ্দেশ্যে পর্দার পিছনে দুটি উপস্থাপনার মধ্যে এবং পিছনে রূপান্তর করবে
জর্জ মাউয়ার

3
@ জর্জি ওপি অনুসারে কেবল বিদ্যমান ভেরিয়েবল পরীক্ষা করা হবে।
সাম্পসন

3
অবশ্যই, তবে বলুন যে আমার কাছে ফাংশন রয়েছে স্ট্রিং (টিআরআর) str রিটার্ন টাইপ অফ স্ট্রিং === 'স্ট্রিং'} কিছু জাভা-রূপান্তর আমার পদ্ধতিটি ব্যবহার করতে পারে যেমন var myString = new String("stuff I like"); isString(myString)এই প্রত্যাবর্তনটি মিথ্যা। এছাড়াও, আমি ঠিক নিশ্চিত নই যে ব্যাকগ্রাইন্ড রূপান্তরটি কত দিন স্থায়ী হয়, আমি জানি যখন আমি "হাই" বলি তখন দৈর্ঘ্য, "হাই" কোনও বস্তুতে রূপান্তরিত হয়, কতক্ষণ তা আবার ফিরে আসবে বা কখনই আবদ্ধ থাকে তা নিশ্চিত নই পরিবর্তনশীল।
জর্জ মাউয়ার

8
সত্য, তবে আপনি কীভাবে স্ট্রিং অবজেক্টটি ব্যবহার করতে চান?
ফলিক্স সাপরেলি

211

এটি করার সর্বোত্তম উপায় হ'ল isNaN+ টাইপ কাস্টিং ব্যবহার করা :

সর্বশেষে পদ্ধতিটি আপডেট করা হয়েছে:

function isNumber(n) { return !isNaN(parseFloat(n)) && !isNaN(n - 0) }

রেজেক্স ব্যবহার করে একই:

function isNumber(n) { return /^-?[\d.]+(?:e-?\d+)?$/.test(n); } 

------------------------

isNumber('123'); // true  
isNumber('123abc'); // false  
isNumber(5); // true  
isNumber('q345'); // false
isNumber(null); // false
isNumber(undefined); // false
isNumber(false); // false
isNumber('   '); // false

21
যদি আপনি বৈধ সংখ্যা হিসাবে পার্স করে এমন স্ট্রিংগুলি গণনা করতে চান তবে এটি একটি ভাল সমাধানের মতো দেখায়।
ট্রেভর বার্নহ্যাম

2
অবগতির জন্য: null0 করতে বাধ্য এবং জন্য ফেরৎ সত্য হয়isNumber(null);
এডওয়ার্ড

1
কী দিয়ে ভুল হয়েছেfunction is_number(n) { return /^-?[\d.]+(?:e-?\d+)?$/.test(n);}
ওয়ানঅফন

1
এটি '123abc' এর মতো স্ট্রিংয়েও ব্যর্থ হয়।
ছাই

1
@ ধন্যবাদ ধন্যবাদ, আমি এই কেসটিও কভার করার জন্য সমাধান আপডেট করেছি।
বিটওফ ইউনিভারসি

73

আমি সবচেয়ে ভাল উপায়টি খুঁজে পেয়েছি হয় হয় স্ট্রিংয়ের কোনও পদ্ধতি পরীক্ষা করা, অর্থাত:

if (x.substring) {
// do string thing
} else{
// do other thing
}

অথবা আপনি যদি কোনও সংখ্যার সম্পত্তির জন্য নম্বরটি পরীক্ষা করে কিছু করতে চান,

if (x.toFixed) {
// do number thing
} else {
// do other thing
}

এটি "হাঁসের টাইপিং" এর মতো, এটি কোন উপায়টি সবচেয়ে বেশি বোঝায় তা আপনার উপর নির্ভর করে। আমার মন্তব্য করার মতো যথেষ্ট কর্ম নেই, তবে টাইপফ বাক্সযুক্ত স্ট্রিং এবং সংখ্যাগুলির জন্য ব্যর্থ হয়, যেমন:

alert(typeof new String('Hello World'));
alert(typeof new Number(5));

"অবজেক্ট" সতর্ক করবে।


2
আমি typeofএটিকে আরও ভাল বলে মনে করি কারণ এটি সর্বদা স্ট্রিংয়ের জন্য পরীক্ষা করতে পারে, আদিম বা স্ট্রিং অবজেক্ট whether আপনাকে কেবল এমন কোনও পদ্ধতির জন্য পরীক্ষা করতে হবে যা আপনি চান সেই ধরণের অনন্য।
ADTC

কোড বজায় রাখতে হবে এমন ব্যক্তির দৃষ্টিকোণ থেকে, এই পথটি বেছে নেওয়া বিভ্রান্তিকর হতে পারে। "কেন তারা সাবস্ট্রিং ব্যবহার করেছিল এবং কোনও মান পাস করে না? আমি এখানে কোন ব্যবসায়িক যুক্তিটি মিস করছি?" খুব কমপক্ষে, এটি যুক্ত যুক্তিটি ব্যাখ্যা করে একটি মন্তব্য দিয়ে যুক্ত করা দরকার।
Lemmings19

3
@ লেমিমিংস ১৯ এটি আসলে স্ট্রিং পদ্ধতিটিকে কল করে না, এটি কেবল এক্সের একটি স্ট্রিং পদ্ধতি আছে কিনা তা পরীক্ষা করে।
অলোকিতো

1
আমি এই ধরণের হাঁসের টাইপিংয়ের ধারণাটি পছন্দ করি তবে এটি পছন্দ মতো জিনিসগুলির জন্য ব্যর্থ হবে {substring:"hello"}। আমি জানি আমার উদ্দেশ্যগুলির জন্য আমি যা পরীক্ষা করেছিলাম তার জন্য প্রয়োজনীয় (বিশেষত অপারেশন) (মডুলাস) করার জন্য আমার প্রয়োজনীয় ধরণের অপারেশনটি কীভাবে করা হয়েছে (স্ট্রিংগুলিতে মডুলাস অনির্ধারিতভাবে রিটার্ন দেয়) তারপরে এটির পরিবর্তে তার জন্য পরীক্ষা করে নেওয়া হয়েছিল।
তাধগ ম্যাকডোনাল্ড-জেনসেন

30

আপনি খুঁজছেন isNaN():

console.log(!isNaN(123));
console.log(!isNaN(-1.23));
console.log(!isNaN(5-2));
console.log(!isNaN(0));
console.log(!isNaN("0"));
console.log(!isNaN("2"));
console.log(!isNaN("Hello"));
console.log(!isNaN("2005/12/12"));

এমডিএন তে জাভাস্ক্রিপ্ট isNaN () ফাংশন দেখুন ।


3
আমি এটি আশ্চর্যজনক মনে করি যে তারা পদ্ধতিটির নামের জন্য বিপরীত ক্রিয়াকলাপটি চয়ন করবে। IsNumber () কল করতে আরও স্বজ্ঞাত মনে হয়।
নাথন টেলর

12
এটি আসলে 'isNumber' এর বিপরীতমুখী অপারেশন নয়। জাভাস্ক্রিপ্টে NaN হ'ল একটি বিশেষ মান। isNaN এর দ্বারা সরবরাহিত সমস্ত কিছুকে সংখ্যায় রূপান্তর করে এবং ফলাফলটি NAN আছে কিনা তা পরীক্ষা করে। "25" এর মতো স্ট্রিংয়ের জন্য, আপনি ভুল ফল পেয়েছেন।
চেতন সাস্ট্রি

1
আমি কেবল "25" দিয়ে পরীক্ষা করেছি এবং এটি মিথ্যা হিসাবে ফিরে আসল - যেমনটি আমি প্রত্যাশা করব।
জাকোব গ্যাড

2
বাইনারি ফ্লোটিং-পয়েন্ট অ্যারিমেটিকের জন্য আইএনইই 754 স্ট্যান্ডার্ডে নাএন একটি বিশেষ মান, কেবল একটি জাভাস্ক্রিপ্ট জিনিস নয়। (ঠিক আছে, সঠিকভাবে বলতে গেলে : "9007199254740990 (এটি, (2 ^ 53) -2) আইইইই স্ট্যান্ডার্ডের স্বতন্ত্র" নং-অ-সংখ্যা "মানগুলি একক বিশেষ
এনএএন

2
মনে রাখবেন যে isNaNআয় falseজন্য null(কিন্তু trueজন্য undefined)।
টনি

28

মানটি একটি স্ট্রিং আক্ষরিক বা স্ট্রিং অবজেক্ট কিনা তা পরীক্ষা করুন:

function isString(o) {
    return typeof o == "string" || (typeof o == "object" && o.constructor === String);
}

ইউনিট পরীক্ষা:

function assertTrue(value, message) {
    if (!value) {
        alert("Assertion error: " + message);
    }
}

function assertFalse(value, message)
{
    assertTrue(!value, message);
}

assertTrue(isString("string literal"), "number literal");
assertTrue(isString(new String("String object")), "String object");
assertFalse(isString(1), "number literal");
assertFalse(isString(true), "boolean literal");
assertFalse(isString({}), "object");

সংখ্যার জন্য পরীক্ষা করা একই রকম:

function isNumber(o) {
    return typeof o == "number" || (typeof o == "object" && o.constructor === Number);
}

1
(o.constructor === স্ট্রিং) নিজেই স্ট্রিং আক্ষরিক জন্য যথেষ্ট বলে মনে হয়।
ক্রিস নো

2
যদি o === নাল
টিজে হয়

3
আমি এই সমাধান পছন্দ। নাল মামলার ব্যতিক্রমটি এড়ানোর জন্য, ও-কনস্ট্রাক্টরের পরিবর্তে ও ["কনস্ট্রাক্টর"] ব্যবহার করুন
dreamerkumar

2
@VishalKumar তাই এই সব এক চাহিদা হল: function is (type, value) { return value["constructor"] === type; }?
সিলিং

22

ES2015 যেহেতু কোনও ভেরিয়েবলের একটি বৈধ সংখ্যা রয়েছে কিনা তা পরীক্ষা করার সঠিক উপায় Number.isFinite(value)

উদাহরণ:

Number.isFinite(Infinity)   // false
Number.isFinite(NaN)        // false
Number.isFinite(-Infinity)  // false

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

Number.isFinite('0')        // false
Number.isFinite(null)       // false

1
ইন্টারনেট এক্সপ্লোরারে এটির সমর্থন নেই। বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

1
স্ট্রিংয়ে কাজ করে না, যা আসল প্রশ্ন।
এরিক গ্রেঞ্জ

18

এটা চেষ্টা কর,

<script>
var regInteger = /^-?\d+$/;

function isInteger( str ) {    
    return regInteger.test( str );
}

if(isInteger("1a11")) {
   console.log( 'Integer' );
} else {
   console.log( 'Non Integer' );
}
</script>

'-2' চেষ্টা করুন। এটি মিথ্যা ফিরে।
কেচেন

1
আপনি কেন এমন উত্তর রাখেন (বা সম্পাদনা করবেন না) যা কাজ করে না? ... মনে রাখবেন, একটি negativeণাত্মক সংখ্যাও একটি পূর্ণসংখ্যা হতে পারে।
আসন

13

এটি করার সর্বোত্তম উপায়:

function isNumber(num) {
  return (typeof num == 'string' || typeof num == 'number') && !isNaN(num - 0) && num !== '';
};

এটি নিম্নলিখিত পরীক্ষার কেস সন্তুষ্ট করে:

assertEquals("ISNUMBER-True: 0", true, isNumber(0));
assertEquals("ISNUMBER-True: 1", true, isNumber(-1));
assertEquals("ISNUMBER-True: 2", true, isNumber(-500));
assertEquals("ISNUMBER-True: 3", true, isNumber(15000));
assertEquals("ISNUMBER-True: 4", true, isNumber(0.35));
assertEquals("ISNUMBER-True: 5", true, isNumber(-10.35));
assertEquals("ISNUMBER-True: 6", true, isNumber(2.534e25));
assertEquals("ISNUMBER-True: 7", true, isNumber('2.534e25'));
assertEquals("ISNUMBER-True: 8", true, isNumber('52334'));
assertEquals("ISNUMBER-True: 9", true, isNumber('-234'));

assertEquals("ISNUMBER-False: 0", false, isNumber(NaN));
assertEquals("ISNUMBER-False: 1", false, isNumber({}));
assertEquals("ISNUMBER-False: 2", false, isNumber([]));
assertEquals("ISNUMBER-False: 3", false, isNumber(''));
assertEquals("ISNUMBER-False: 4", false, isNumber('one'));
assertEquals("ISNUMBER-False: 5", false, isNumber(true));
assertEquals("ISNUMBER-False: 6", false, isNumber(false));
assertEquals("ISNUMBER-False: 7", false, isNumber());
assertEquals("ISNUMBER-False: 8", false, isNumber(undefined));
assertEquals("ISNUMBER-False: 9", false, isNumber(null));

13
//testing data types accurately in JavaScript (opposed to "typeof")
//from http://bonsaiden.github.com/JavaScript-Garden/
function is(type, obj) {
    var clas = Object.prototype.toString.call(obj).slice(8, -1);
    return obj !== undefined && obj !== null && clas === type;
}

//basic usage
is('String', 'test'); // true
is('Array', true); // false

বা কোনও অজানা প্রকারটি ফিরিয়ে আনতে এটি খাপ খাই:

function realTypeOf(obj) {
    return Object.prototype.toString.call(obj).slice(8, -1);
}

//usage
realTypeOf(999); // 'Number'

12 ই মে, 2012 আপডেট: জাভাস্ক্রিপ্টে সম্পূর্ণ উদাহরণ : একটি আরও ভাল টাইপ


সম্পর্কিত উন্নতির জন্য স্থির জায়গা realTypeOf: realTypeOf(NaN) -> "Number"যা typeofসম্মত হিসাবে একই আচরণ তবে আদর্শ থেকে এখনও দূরে।
সর্বোচ্চ

9

এখানে শূন্য বা নাল স্ট্রিং যোগ করে কোনও সংখ্যা বা স্ট্রিংয়ে ইনপুটকে জোর দেওয়া, এবং তারপরে টাইপ করা সমতার তুলনা করার ধারণার উপর ভিত্তি করে এখানে একটি পদ্ধতি রয়েছে।

function is_number(x) { return x === x+0;  }
function is_string(x) { return x === x+""; }

কিছু অকাট্য কারণে, এর x===x+0চেয়ে ভাল পারফরম্যান্স বলে মনে হচ্ছে x===+x

এই ব্যর্থতা আছে এমন কোনও মামলা আছে?

একই শিরা মধ্যে:

function is_boolean(x) { return x === !!x; }

এই আস্তে যতো তাড়াতাড়ি উপস্থিত হতে পারে পারেন x===true || x===falseবা typeof x==="boolean"(এবং অনেক দ্রুত তুলনায় x===Boolean(x))।

তারপরেও আছে

function is_regexp(x)  { return x === RegExp(x); }

এগুলি প্রতিটি "টাইপ" সম্পর্কিত একটি "পরিচয়" ক্রিয়াকলাপের অস্তিত্বের উপর নির্ভর করে যা কোনও মানকে প্রয়োগ করা যেতে পারে এবং নির্ভরযোগ্যভাবে প্রশ্নে টাইপের একটি মান উত্পাদন করতে পারে। আমি তারিখের জন্য এই জাতীয় অপারেশন সম্পর্কে ভাবতে পারি না।

NaN এর জন্য রয়েছে

function is_nan(x) { return x !== x;}

এটি মূলত আন্ডারস্কোরের সংস্করণ, এবং এটি দাঁড়িয়ে থেকে প্রায় চারগুণ দ্রুত isNaN(), তবে আন্ডারস্কোর উত্সের মন্তব্যগুলিতে উল্লেখ করা হয়েছে যে "NaN হল একমাত্র সংখ্যা যা নিজের সমান হয় না" এবং _.আইস নাম্বারের জন্য একটি পরীক্ষা যোগ করে। কেন? অন্য কোন বস্তু তাদের সমান হবে না? এছাড়াও, আন্ডারস্কোর ব্যবহারx !== +x তবে +এখানে কী পার্থক্য করতে পারে?

তারপরে বিড়ম্বনার জন্য:

function is_undefined(x) { return x===[][0]; }

অথবা এটা

function is_undefined(x) { return x===void(0); }

1
x! == + x প্রথমে x কে একটি সংখ্যায় রূপান্তরিত করার চেষ্টা করে।
অ্যাড্রিয়ান বার্থোলোমিউ

8

আপনি কি এটি 1 দিয়ে ভাগ করতে পারেন?

আমি ধরে নিই যে সমস্যাটি একটি স্ট্রিং ইনপুট যেমন হবে: "123ABG"

var Check = "123ABG"

if(Check == Check / 1)
{
alert("This IS a number \n")
}

else
{
alert("This is NOT a number \n")
}

সম্প্রতি একটি উপায় আমি এটি করেছি।


আমি মনে করি না যে এটি সংখ্যার একটি স্ট্রিং হলে এটি সত্য হতে চায়। হতে পারে ব্যবহার ===
কর্টিস

7

আহ, কেমন আছে:

function IsString(obj) {
    return obj !== undefined && obj != null && obj.toLowerCase !== undefined;
}

অনেক মাস পরে আরও পর্যালোচনা করার পরে, এটি কেবল গ্যারান্টি দেয় objএমন একটি জিনিস যা পদ্ধতি বা সম্পত্তির নাম toLowerCaseসংজ্ঞায়িত করা আছে। আমি আমার উত্তর লজ্জা। শীর্ষে ভোট দেওয়া typeofএকটি দেখুন।


7

বা কেবল এর বিপরীতটি ব্যবহার করুন isNaN():

if(!isNaN(data))
  do something with the number
else
  it is a string

এবং হ্যাঁ, jQuery এর ব্যবহার বাক্সের $.isNumeric()জন্য আরও মজাদার।


isNaN('123')মিথ্যা দেয়, যদিও যুক্তি একটি
সংখ্যাযুক্ত

6

আমি মনে করি ভেরিকে স্ট্রিংয়ে রূপান্তর করা কর্মক্ষমতা হ্রাস করে, সর্বশেষতম ব্রাউজারগুলিতে সঞ্চালিত এই পরীক্ষাটি তাই দেখায়।

সুতরাং আপনি যদি পারফরম্যান্স সম্পর্কে চিন্তা করেন তবে আমি এটি ব্যবহার করতাম:

typeof str === "string" || str instanceof String

ভেরিয়েবলটি একটি স্ট্রিং কিনা তা যাচাইয়ের জন্য (আপনি ব্যবহার করলেও var str = new String("foo"), str instanceof Stringসত্য ফিরে আসবে)।

পরীক্ষণ যদি এটি একটি সংখ্যা আমি নেটিভ জন্য যেতে হবে এর জন্য: isNaN; ফাংশন।



4

এই সমাধানটি এখানে উত্থাপিত অনেকগুলি সমস্যার সমাধান করে!

এটি এখন পর্যন্ত আমি সবচেয়ে নির্ভরযোগ্য পদ্ধতিটি ব্যবহার করেছি। আমি এটি আবিষ্কার করি নি, এবং আমি এটি কোথায় পেয়েছিলাম তা স্মরণ করতে পারি না। অন্যান্য কৌশল যেখানে ব্যর্থ হয় সেখানে এটি কাজ করে:

// Begin public utility /getVarType/
// Returns 'Function', 'Object', 'Array',
// 'String', 'Number', 'Boolean', or 'Undefined'
getVarType = function ( data ){
  if (undefined === data ){ return 'Undefined'; }
  if (data === null ){ return 'Null'; }
  return {}.toString.call(data).slice(8, -1);
};  
// End public utility /getVarType/

সঠিকতার উদাহরণ

var str = new String();
console.warn( getVarType(str) ); // Reports "String"    
console.warn( typeof str );      // Reports "object"

var num = new Number();
console.warn( getVarType(num) ); // Reports "Number"
console.warn( typeof num );      // Reports "object"

var list = [];
console.warn( getVarType( list ) ); // Reports "Array"
console.warn( typeof list );        // Reports "object"

2
এবং এটি সত্যিই ধীর।

তারাজাবুরো, আপনি কোথায় আপনার ডেটা পাবেন তা আমি জানি না, তবে সামান্য মানদণ্ডের
ক্রমটি

আমি এটি "সত্যই ধীর" পাই না। 1 মিলিয়ন পুনরাবৃত্তির ওপরে পরীক্ষার গতি, আমি এটিকে typeofChrome এর নেটিভ পদ্ধতির (0.788s বনাম 1.481s) অর্ধেক গতির চেয়ে খারাপ বলে মনে করি না । উন্নত ফলাফল বিবেচনা করে এটি অবশ্যই গ্রহণযোগ্য কর্মক্ষমতা। আপনি কেন এটি "সত্যই ধীর" বলে মনে করেন? সম্ভবত এটি - আই 6/7/8 এ? তবে এই ব্রাউজারগুলিতে সবকিছু "সত্যই ধীর"।
মাইকেল মিকোভস্কি

ঠিক আছে, আমি বলেছিলাম যে কারণ আমি ইতিমধ্যে বেঞ্চমার্কিং করে ফেলেছি। Jsperf.com/check-typeof-number-again এ একটি নতুন ছোট একসাথে রাখুন এবং typeof100x দ্রুত, আমি কী অনুপস্থিত?

আপনি টাইপটি পরীক্ষা করার সময় বেশিরভাগ কোডের জন্য 3 মি অপ্টস / গুলি একটি নন-ইস্যু তা হারাচ্ছেন। আমি কোনও ব্যবস্থায় এটিকে "সত্যই ধীর" বলব না। আমার মানদণ্ডটি এর মতো দেখাচ্ছে: var i, k, start = + new তারিখ (); (i = 0; i <1000000; i ++) {k = typof ('foo') এর জন্য; k = টাইপফ (123.5); }; শেষ = + নতুন তারিখ (); কনসোল.লগ (শেষ - শুরু);
মাইকেল মিকোভস্কি

4

আপনি যদি আপনার কাছে থাকা jQuery ব্যবহার করেন তবে একটি এফওয়াইআইকে জাসুত করুন

$.isNumeric() 

এটি পরিচালনা করতে। Http://api.jquery.com/jQuery.isNumeric/ এ আরও বিশদ


4

typof বেশিরভাগ ক্ষেত্রে আমার জন্য খুব ভাল কাজ করে। আপনি যদি একটি বিবৃতি ব্যবহার করার চেষ্টা করতে পারেন

if(typeof x === 'string' || typeof x === 'number') {
    console.log("Your statement");
}

যেখানে এক্স আপনার পছন্দের কোনও পরিবর্তনশীল নাম


এই উত্তরটি সর্বাধিক উত্সাহিত একটির চেয়ে কী যুক্ত করে?
বারটেক বানাচেউইচিজ

2
সরলতা এবং স্পষ্টতা?
টিম এরিকসন

3

ইতিবাচক এবং নেতিবাচক সংখ্যাগুলি সম্পর্কে যা ভাবা যায় সেগুলির সেরা উপায়টি হ'ল: ওরিলি জাভাস্ক্রিপ্ট এবং ডিএইচটিএমএল কুকবুক :

function isNumber(elem) {
var str = elem.value;
var oneDecimal = false;
var oneChar = 0;
// make sure value hasn't cast to a number data type
str = str.toString( );
for (var i = 0; i < str.length; i++) {
    oneChar = str.charAt(i).charCodeAt(0);
    // OK for minus sign as first character
    if (oneChar =  = 45) {
        if (i =  = 0) {
            continue;
        } else {
            alert("Only the first character may be a minus sign.");
            return false;
        }
    }
    // OK for one decimal point
    if (oneChar =  = 46) {
        if (!oneDecimal) {
            oneDecimal = true;
            continue;
        } else {
            alert("Only one decimal is allowed in a number.");
            return false;
        }
    }
    // characters outside of 0 through 9 not OK
    if (oneChar < 48 || oneChar > 57) {
        alert("Enter only numbers into the field.");
        return false;
    }
}
return true;

}


3

Errr? শুধু নিয়মিত এক্সপ্রেশন ব্যবহার করুন! :)

function isInteger(val) {
  return val.match(/^[0-9]$/)
}

function isFloat(val) {
  return val.match(/^[0-9]*/\.[0-9]+$/)
}

3

যেহেতু টাইপফের সাথে '1234' হিসাবে একটি স্ট্রিং 'স্ট্রিং' দেখায়, এবং বিপরীতটি কখনই ঘটতে পারে না (টাইপফ 123 সর্বদা সংখ্যায় থাকবে) তাই সাধারণ রেজেক্স ব্যবহার করা সবচেয়ে ভাল /^\-?\d+$/.test(var)। অথবা ফ্লোটস, পূর্ণসংখ্যার এবং নেতিবাচক সংখ্যার সাথে মেলে আরও বেশি অগ্রসর, /^[\-\+]?[\d]+\.?(\d+)?$/ এর গুরুত্বপূর্ণ দিকটি .testহ'ল এটি যদি কোনও স্ট্রিং না হয় তবে মানটি কিছু হতে পারে an

var val, regex = /^[\-\+]?[\d]+\.?(\d+)?$/;

regex.test(val)       // false 
val = '1234';
regex.test(val)       // true
val = '-213';
regex.test(val)       // true
val = '-213.2312';
regex.test(val)       // true
val = '+213.2312';
regex.test(val)       // true
val = 123;
regex.test(val)       // true
val = new Number(123);
regex.test(val)       // true
val = new String('123');
regex.test(val)       // true
val = '1234e';
regex.test(val)       // false 
val = {};
regex.test(val)       // false 
val = false;
regex.test(val)       // false 
regex.test(undefined) // false 
regex.test(null)      // false 
regex.test(window)    // false 
regex.test(document)  // false 

আপনি যদি প্রকৃত প্রকারের সন্ধান করে থাকেন তবে টাইপফুল একাই করবেন।


3

@ বিটঅফউইনভার্সির উত্তরটি ভাল, এবং আমি একটি নতুন উপায়ে নিয়ে এসেছি:

function isNum(n) {
    return !isNaN(n/0);
}

isNum('')  // false
isNum(2)   // true
isNum('2k') // false
isNum('2')  //true

আমি জানি 0লভ্যাংশ হতে পারে না, তবে এখানে ফাংশনটি পুরোপুরি কার্যকর হয়।


2

টাইপ চেকিং

typeofঅপারেটরটি ব্যবহার করে আপনি ভেরিয়েবলের ধরণটি পরীক্ষা করতে পারেন :

typeof variable

মান পরীক্ষা করা

নীচের কোডটি সংখ্যার জন্য সত্য এবং অন্য কোনও কিছুর জন্য মিথ্যা দেয়:

!isNaN(+variable);

var ভেরিয়েবল = '123'; console.log (! isNaN (+ + পরিবর্তনশীল)); সত্য দেয় যদিও এটি একটি স্ট্রিং এবং একটি সংখ্যা প্রকারের নয়
Justamartin

কারণ '123' একটি সংখ্যা! আপনি যদি ভেরিয়েবলের ধরণ জানতে চান তবে আপনি সহজেই typeofঅপারেটর ব্যবহার করতে পারেন ! @ জাস্টমার্টিন
আমির ফো

হ্যাঁ, তবে মূল প্রশ্নটি হ'ল যে কোনও স্ট্রিং-টাইপড ভেরিয়েবলকে সংখ্যা-টাইপযুক্ত ভেরিয়েবলগুলি থেকে পৃথক করা। '123` এখনও একটি স্ট্রিং। আমি যদি 123 পাস করি তবে উত্তরটি হওয়া উচিত numberতবে আমি যদি '123' বা 'এবিসি' বা অন্য কোনও উদ্ধৃত আক্ষরিক পাস করি তবে এটি একটি স্ট্রিং, এবং এটি কোনও সংখ্যায় পার্স করা যায় কি না তা বিবেচ্য নয়।
জাস্টামার্টিন

@ জাস্টমার্টিন ঠিক আছে আমি আমার উত্তর সম্পাদনা করেছি।
আমির ফো

1

সংখ্যা বা স্ট্রিং সনাক্ত করতে এক্সওআর অপারেশন ব্যবহার করা যেতে পারে। সংখ্যা ^ 0 সর্বদা আউটপুট হিসাবে নম্বর দেবে এবং স্ট্রিং ^ 0 আউটপুট হিসাবে 0 দেবে।

Example: 
   1)  2 ^ 0 = 2
   2)  '2' ^ 0  = 2
   3)  'Str' ^ 0 = 0

1

সহজ এবং পুঙ্খানুপুঙ্খ:

function isNumber(x) {
  return parseFloat(x) == x
};

পরীক্ষার কেস:

console.log('***TRUE CASES***');
console.log(isNumber(0));
console.log(isNumber(-1));
console.log(isNumber(-500));
console.log(isNumber(15000));
console.log(isNumber(0.35));
console.log(isNumber(-10.35));
console.log(isNumber(2.534e25));
console.log(isNumber('2.534e25'));
console.log(isNumber('52334'));
console.log(isNumber('-234'));
console.log(isNumber(Infinity));
console.log(isNumber(-Infinity));
console.log(isNumber('Infinity'));
console.log(isNumber('-Infinity'));

console.log('***FALSE CASES***');
console.log(isNumber(NaN));
console.log(isNumber({}));
console.log(isNumber([]));
console.log(isNumber(''));
console.log(isNumber('one'));
console.log(isNumber(true));
console.log(isNumber(false));
console.log(isNumber());
console.log(isNumber(undefined));
console.log(isNumber(null));
console.log(isNumber('-234aa'));

0

সহজভাবে ব্যবহার

myVar.constructor == String

অথবা

myVar.constructor == Number

আপনি যদি বস্তু বা আক্ষরিক হিসাবে সংজ্ঞায়িত স্ট্রিংগুলি পরিচালনা করতে চান এবং সংরক্ষণ করেন তবে আপনি কোনও সহায়ক ফাংশন ব্যবহার করতে চান না।



0

পার্টিতে খুব দেরী; যাইহোক, নীচেরগুলি সর্বদা আমার জন্য ভাল কাজ করেছে যখন আমি কিছু ইনপুট হয় স্ট্রিং বা একটি শটে একটি সংখ্যা কিনা তা পরীক্ষা করতে চাই।

return !!Object.prototype.toString.call(input).match(/\[object (String|Number)\]/);

0

একটি ভেরিয়েবল একটি সংখ্যা কিনা তা যাচাই করার জন্য একটি জেএসপিআফ তৈরি করেছে। বেশ আকর্ষণীয়! টাইপফের আসলে পারফরম্যান্স ব্যবহার রয়েছে। typeofসংখ্যা ছাড়া অন্য যে কোনও কিছুর জন্য ব্যবহার করা সাধারণত একটি হিসাবে 1 / তৃতীয় গতিতে যায়variable.constructor কারণ জাভাস্ক্রিপ্টে বেশিরভাগ ডেটা ধরণের অবজেক্ট হয়; সংখ্যা নেই!

http://jsperf.com/jemiloii-fastest-method-to-check-if-type-is-a-number

typeof variable === 'number'| দ্রুততম | আপনি যদি 5, এবং 5 এর মতো একটি সংখ্যা চান না
typeof parseFloat(variable) === 'number' | দ্রুততম | আপনি যদি 5 এবং '5' এর মতো একটি সংখ্যা চান

isNaN()ধীর, তবে খুব ধীর নয়। আমার খুব বেশি আশা ছিল parseIntএবং parseFloatসেগুলি ভয়াবহভাবে ধীর ছিল।


0

নম্বরগুলি সনাক্ত করার জন্য, জাভাস্ক্রিপ্ট থেকে নিম্নলিখিত প্যাসেজ: ডগলাস ক্রকফোর্ডের গুড পার্টস প্রাসঙ্গিক:

মানটি একটি সংখ্যা হিসাবে ব্যবহৃত হতে পারে কিনা তা নির্ধারণের সেরা উপায় হলফিনিট ফাংশন কারণ এটি NaN এবং অনন্ততাকে প্রত্যাখ্যান করে। দুর্ভাগ্যক্রমে, আইসফিনিট তার অপারেন্ডকে একটি সংখ্যায় রূপান্তরিত করার চেষ্টা করবে, সুতরাং যদি মানটি কোনও সংখ্যায় না হয় তবে এটি ভাল পরীক্ষা নয়। আপনি নিজের আইস নাম্বার ফাংশনটি সংজ্ঞায়িত করতে চাইতে পারেন:

var isNumber = function isNumber(value) { return typeof value === 'number' &&
            isFinite(value);
};
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.