জাভাস্ক্রিপ্টে দশমিক সংখ্যা বৈধ করুন - ইসনুমারি ()


2376

জাভাস্ক্রিপ্টে দশমিক সংখ্যা কার্যকর করার সবচেয়ে পরিষ্কার, সবচেয়ে কার্যকর উপায় কী?

এর জন্য বোনাস পয়েন্ট:

  1. নির্মলতা. সমাধান পরিষ্কার এবং সহজ হওয়া উচিত।
  2. ক্রস-প্ল্যাটফর্ম।

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

01. IsNumeric('-1')      => true
02. IsNumeric('-1.5')    => true
03. IsNumeric('0')       => true
04. IsNumeric('0.42')    => true
05. IsNumeric('.42')     => true
06. IsNumeric('99,999')  => false
07. IsNumeric('0x89f')   => false
08. IsNumeric('#abcdef') => false
09. IsNumeric('1.2.3')   => false
10. IsNumeric('')        => false
11. IsNumeric('blah')    => false

256
কেবলমাত্র একটি নোট 99,999 ফ্রান্সের একটি বৈধ সংখ্যা, এটি ইউকে / মার্কিন ফর্ম্যাটে 99.999 এর সমান, সুতরাং আপনি যদি কোনও ইনপুট ফর্মটি থেকে স্ট্রিংয়ে পড়েন তবে 99,999 সত্য হতে পারে।
অবিরাম


79
দশমিক কমা হ'ল সমগ্র ইউরোপ এবং রাশিয়ার (যুক্তরাজ্য ব্যতীত)
স্ট্যান্ডার্ড

90
jQuery 1.7 jQuery.isNumericইউটিলিটি ফাংশনটি চালু করেছে : api.jquery.com/jQuery.isNumeric
Ates

24
jQuery.isNumericওপির সপ্তম পরীক্ষার ক্ষেত্রে ব্যর্থ হবে ( IsNumeric('0x89f') => *false*)। তবে আমি নিশ্চিত নই যে আমি এই পরীক্ষার মামলার সাথে একমত হই কিনা।
টিম লেহনার

উত্তর:


2898

@ জোয়েলের উত্তরটি খুব নিকটে, তবে এটি নিম্নলিখিত ক্ষেত্রে ব্যর্থ হবে:

// Whitespace strings:
IsNumeric(' ')    == true;
IsNumeric('\t\t') == true;
IsNumeric('\n\r') == true;

// Number literals:
IsNumeric(-1)  == false;
IsNumeric(0)   == false;
IsNumeric(1.1) == false;
IsNumeric(8e5) == false;

কিছুক্ষণ আগে আমাকে একটি IsNumericফাংশন বাস্তবায়ন করতে হয়েছিল , কোনও ভেরিয়েবলের কোনও সংখ্যক মান রয়েছে কিনা তা নির্ধারণের জন্য, এটির সংখ্যার মান নির্বিশেষে এটি হতে পারে String(আমাকে ঘনিষ্ঠভাবে চিহ্নিতকরণ ইত্যাদিও বিবেচনা করতে হবে), একটি Numberবস্তু, কার্যত সেই ফাংশনে কিছু পাস হতে পারে, আমি ধরণের জোরের (যেমন। +true == 1;তবে trueবিবেচনা করা উচিত নয় "numeric") যত্ন নিয়ে কোনও ধরণের অনুমান করতে পারি না ।

আমি মনে করি যে অসংখ্য ফাংশন বাস্তবায়নের জন্য করা এই 3030 ইউনিটের পরীক্ষাগুলির এই সেটটি ভাগ করে নেওয়া উপযুক্ত এবং আমার সমস্ত পরীক্ষাগুলি পাস করে এমনটিও ভাগ করুন:

function isNumeric(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}

সংখ্যায় জোর করে রূপান্তরকরণের কারণে পিএস ইসন এবং ইসফিন্টের একটি বিভ্রান্তিকর আচরণ রয়েছে। ES6 এ, সংখ্যা. isNaN এবং সংখ্যা.আইসফিন্ট এই সমস্যাগুলি সমাধান করবে। এগুলি ব্যবহার করার সময় এটি মনে রাখবেন।


আপডেট : এখানে jQuery কীভাবে এটি করে তা এখানে (2.2-স্থিতিশীল) :

isNumeric: function(obj) {
    var realStringObj = obj && obj.toString();
    return !jQuery.isArray(obj) && (realStringObj - parseFloat(realStringObj) + 1) >= 0;
}

আপডেট : কৌণিক 4.3 :

export function isNumeric(value: any): boolean {
    return !isNaN(value - parseFloat(value));
}

26
এটি অন্যান্য লোকালগুলির সাথে ব্যর্থ হয় যেখানে আমরা দশমিক কমা ব্যবহার করি তবে `n = n.replace (/, /,"। ") যোগ করুন; '; ফিরে আসার আগে এটি ঠিক করতে।
জোল্টান লেঙ্গেল

5
@RobG, যে আচরণ ইচ্ছাকৃত হয়, 2e308 > Number.MAX_VALUEযেহেতু 2e308 == Infinity। আপনি যদি একটি ফাংশন যা রিটার্ন চান trueএছাড়াও ইতিবাচক ও নেতিবাচক অনন্ত মানের জন্য, চেক ফাংশন নং 2 মধ্যে পরীক্ষা স্যুট । চিয়ার্স।
সিএমএস

39
যাইহোক, ইউনিট পরীক্ষাগুলি এখন jQuery প্রকল্প
সিএমএস

7
jQuery এখন এই বাস্তবায়নটি ব্যবহার করছে
রিচার্ড টাওয়ার্স 11

4
এখানে সমাধানটি হ'ল কেবল জিকুয়েরি ব্যবহার করা। তাদের এখন এটি আরও উন্নত রূপায়ণ রয়েছে: github.com/jquery/jquery/blob/master/src/core.js#L230
রবার্ট ম্যাসাওলি

337

Arrrgh! নিয়মিত প্রকাশের উত্তরগুলি শুনবেন না। RegEx এটির জন্য অভিনব, এবং আমি কেবল পারফরম্যান্সের কথা বলছি না। আপনার নিয়মিত প্রকাশের সাথে ভুলগুলি চিহ্নিত করা সূক্ষ্ম করা সহজ, অসম্ভব।

আপনি যদি ব্যবহার করতে না পারেন তবে এটি isNaN()আরও ভাল কাজ করা উচিত:

function IsNumeric(input)
{
    return (input - 0) == input && (''+input).trim().length > 0;
}

এখানে কিভাবে এটা কাজ করে:

(input - 0)অভিব্যক্তি আপনার ইনপুট মূল্যের ওপর জাভাস্ক্রিপ্টের এই মাতব্বরী করতে জাভাস্ক্রিপ্ট বাধ্য করে; বিয়োগ বিয়োগের জন্য প্রথমে এটি একটি সংখ্যা হিসাবে ব্যাখ্যা করতে হবে। যদি কোনও সংখ্যায় এই রূপান্তরটি ব্যর্থ হয় তবে অভিব্যক্তিটির ফলাফল হবে NaN। এই সংখ্যাসূচক ফলাফলটি আপনি যে মূল মানের সাথে উত্তীর্ণ হয়েছিল তার সাথে তুলনা করা হয় Since বাম দিকটি যেহেতু এখন সংখ্যাসূচক, তাই পুনরায় ধরণের চাপ প্রয়োগ করা হয়। এখন যেহেতু উভয় পক্ষের ইনপুট একই মূল মান থেকে একই ধরণের কাছে জোর করা হয়েছিল, আপনি ভাবেন যে এগুলি সর্বদা একই (সর্বদা সত্য) হওয়া উচিত। তবে, একটি বিশেষ নিয়ম আছে যা বলে NaNযে কখনই সমান হয় না NaN, এবং তাই এমন একটি মান যা কোনও সংখ্যায় রূপান্তর করতে পারে না (এবং কেবলমাত্র মানগুলি যে সংখ্যায় রূপান্তর করতে পারে না) ফলস্বরূপ মিথ্যা হতে পারে।

দৈর্ঘ্যের উপর চেক খালি স্ট্রিং জড়িত একটি বিশেষ ক্ষেত্রে জন্য। এছাড়াও মনে রাখবেন যে এটি আপনার 0x89f পরীক্ষায় নেমে আসে, তবে এটি কারণ অনেক পরিবেশে এটি একটি সংখ্যার আক্ষরিক সংজ্ঞা দেওয়ার জন্য একটি সঠিক উপায়। আপনি যদি সেই নির্দিষ্ট দৃশ্যটি ধরতে চান তবে আপনি একটি অতিরিক্ত চেক যোগ করতে পারেন। আরও ভাল, যদি এটি ব্যবহার না করার কারণ হয় isNaN()তবে আপনার নিজের ফাংশনটি কেবল তার চারপাশে মুড়ে রাখুন isNaN()যা অতিরিক্ত চেকও করতে পারে।

সংক্ষেপে, যদি আপনি জানতে চান যে কোনও মানকে কোনও সংখ্যায় রূপান্তর করা যায় কিনা, আসলে এটি একটি সংখ্যায় রূপান্তর করার চেষ্টা করুন।


আমি ফিরে গিয়েছিলাম এবং কেন একটি সাদা স্থানের স্ট্রিংয়ের প্রত্যাশিত আউটপুট ছিল না তার জন্য কিছু গবেষণা করেছি এবং আমি মনে করি এটি এখনই পেয়েছি: খালি স্ট্রিংয়ের 0পরিবর্তে জোর করা হয় NaN। দৈর্ঘ্য চেক করার আগে স্ট্রিংটি কেবল ছাঁটাই করা এই কেসটিকে পরিচালনা করবে।

নতুন কোডের বিরুদ্ধে ইউনিট পরীক্ষা চালানো এবং এটি কেবল অসীম এবং বুলিয়ান লিটারে ব্যর্থ হয় এবং কেবলমাত্র সমস্যা হওয়া উচিত যদি আপনি কোড তৈরি করে থাকেন (সত্যই, কে আক্ষরিক টাইপ করে পরীক্ষা করে দেখবেন যে এটি সংখ্যাযুক্ত কিনা? আপনার জানা উচিত ) এবং এটি উত্পন্ন করার জন্য কিছু অদ্ভুত কোড হবে।

তবে, আবার কখনও এটি ব্যবহারের একমাত্র কারণ হ'ল যদি কোনও কারণে আপনাকে ইসনএন () এড়িয়ে চলতে হয়।


28
এই হোয়াইটস্পেস স্ট্রিং, যেমন ব্যর্থ হলে IsNumeric(' '), IsNumeric('\n\t')ইত্যাদি সব প্রত্যাবর্তনtrue
ক্রিসেন্ট টাটকা

29
এটি আমি যে পোস্ট ইউনিট পরীক্ষাগুলির সেট পরীক্ষা করে তা Numberঅক্ষরে অক্ষরেও ফেলবে IsNumeric(5) == false;, এই ফাংশনটি 16পরীক্ষার স্যুটটিতে নম্বর । stackoverflow.com/questions/18082/…
CMS

20
আমি বিশ্বাস করতে পারি না যে কেউ নিয়মিত এক্সপ্রেশন ব্যবহার না করার বিষয়ে সতর্ক করার পরে একটি নিয়মিত অভিব্যক্তি (প্রতিস্থাপন) ব্যবহারের দিকে ইঙ্গিত করেন ... ঠিক আছে, একটি সাদা স্থানের স্থান প্রতিস্থাপন সংখ্যার পার্সের চেয়ে সহজ, তবে এটি অবশ্যই "আইকি" রয়েছে।
প্যাট্রিক এম

1
@ ওরিওল এটি একটি বড় সমস্যা ... date তারিখের পরে কোনও সুরক্ষা সংশোধন ছাড়াই এক্সপি থেকে দূরে সরে যাওয়ার বিষয়টিকে অগ্রাধিকার দেওয়া উচিত।
জোয়েল কোহোর্ন

1
@ ওরিওল এক্সপি বা না, আপনি যদি আইই 8 ব্যবহার করছেন বা নিম্নতর হন আপনি ভয়াবহভাবে পুরানো সফ্টওয়্যার ব্যবহার করছেন। মঞ্জুরিপ্রাপ্ত এক্সপি IE9 + চালাতে পারে না তাই Chrome বা FF ব্যবহার করুন। আইই 8 ব্যবহার করে অতীতে বসবাসকারী ব্যক্তিরা অনেকগুলি ওয়েব বিকাশকারীদের অস্তিত্বের প্রতিবন্ধক। আইই 8-তেও পুরোপুরি ভাল কোডটি চলেছে তা নিশ্চিত করতে ব্যয় করা সময়টি যদি আমি ফিরে পেতে পারি ... আমার কাছে এফএফ এবং ক্রোমে কাজ করে এমন কোড নেওয়া এবং আইই 8 তে চালানোর জন্য এটি প্যাচ করা উইন্ডোজ 8 এক্সিকিউটেবল হিসাবে গ্রহণ করার মতো বাস্তব উইন্ডোজ ৩.১-তে এটি একইরূপে চলছে কিনা তা নিশ্চিত করে।
চিলনিট

70

এই উপায়টি ভালভাবে কাজ করছে বলে মনে হচ্ছে:

function IsNumeric(input){
    var RE = /^-{0,1}\d*\.{0,1}\d+$/;
    return (RE.test(input));
}

এক লাইনে:

const IsNumeric = (num) => /^-{0,1}\d*\.{0,1}\d+$/.test(num);

এবং এটি পরীক্ষা করতে:

const IsNumeric = (num) => /^-{0,1}\d*\.{0,1}\d+$/.test(num);
    
    function TestIsNumeric(){
        var results = ''
        results += (IsNumeric('-1')?"Pass":"Fail") + ": IsNumeric('-1') => true\n";
        results += (IsNumeric('-1.5')?"Pass":"Fail") + ": IsNumeric('-1.5') => true\n";
        results += (IsNumeric('0')?"Pass":"Fail") + ": IsNumeric('0') => true\n";
        results += (IsNumeric('0.42')?"Pass":"Fail") + ": IsNumeric('0.42') => true\n";
        results += (IsNumeric('.42')?"Pass":"Fail") + ": IsNumeric('.42') => true\n";
        results += (!IsNumeric('99,999')?"Pass":"Fail") + ": IsNumeric('99,999') => false\n";
        results += (!IsNumeric('0x89f')?"Pass":"Fail") + ": IsNumeric('0x89f') => false\n";
        results += (!IsNumeric('#abcdef')?"Pass":"Fail") + ": IsNumeric('#abcdef') => false\n";
        results += (!IsNumeric('1.2.3')?"Pass":"Fail") + ": IsNumeric('1.2.3') => false\n";
        results += (!IsNumeric('')?"Pass":"Fail") + ": IsNumeric('') => false\n";
        results += (!IsNumeric('blah')?"Pass":"Fail") + ": IsNumeric('blah') => false\n";
        
        return results;
    }

console.log(TestIsNumeric());
.as-console-wrapper { max-height: 100% !important; top: 0; }

আমি এই রেজেেক্সটি http://www.codetoad.com/javascript/isnumeric.asp থেকে ধার নিয়েছি । ব্যাখ্যা:

/^ match beginning of string
-{0,1} optional negative sign
\d* optional digits
\.{0,1} optional decimal point
\d+ at least one digit
$/ match end of string

1
// আপনার পরীক্ষার ফলাফলগুলিতেও যুক্ত করা উচিত + = (! ইসনুমিক ('-')? "পাস": "ব্যর্থ") + ": ইসনুমারিক ('-') => মিথ্যা \ n"; ফলাফল + = (! ইসনুমিক ('01 ')? "পাস": "ব্যর্থ") + ": ইসনুমারিক ('01') => মিথ্যা \ n"; ফলাফল + = (! ইসনুমারিক ('- 01')? "পাস": "ব্যর্থ") + ": ইসনুমারিক ('- 01') => মিথ্যা \ n"; ফলাফল + = (! ইসনুমারিক ('000')? "পাস": "ব্যর্থ") + ": ইসনুমারিক ('000') => মিথ্যা \ n";
ড্যান

এটি কী করে? / ^ - {0,1} \ d * \।, 0,1} \ d + $ /
আমাকে কল করুন

"?" এর সাথে "{0,1 with" প্রতিস্থাপন করা যেতে পারে, তাই আপনার রিজেক্সএক্সটি এর মতো দেখাবে: /^-?\d*\ ??\d+$/?
মেঘ

সুন্দর এবং সহজ
ব্রেকার

53

ইয়াহু ইউআই এটি ব্যবহার করে:

isNumber: function(o) {
    return typeof o === 'number' && isFinite(o);
}

25
এটি সংখ্যার বিষয়বস্তুর বিপরীতে ভেরিয়েবলের ধরনটি আরও চেক করছে। এটি তৈরি করা সংখ্যায়ও ব্যর্থ হবে new Number(1)
অ্যালেক্স

4
অ্যালেক্স যেমন বলেছে, এটি আসলে উত্থাপিত প্রশ্নের উত্তর দেয় না কারণ ও = "1001" হলে এটি ব্যর্থ হবে।
কেস

50
function IsNumeric(num) {
     return (num >=0 || num < 0);
}

এটি 0x23 টাইপ সংখ্যার জন্যও কাজ করে।


29
IsNumeric(''), IsNumeric(' '), IsNumeric(true), IsNumeric(false), IsNumeric(null)আসতে trueপরিবর্তে false
ওরিওল

49

গৃহীত উত্তরটি আপনার পরীক্ষা # 7 এ ব্যর্থ হয়েছে এবং আমি অনুমান করি এটি কারণ আপনি আপনার মতামত পরিবর্তন করেছেন। সুতরাং এটি গ্রহণযোগ্য উত্তরের একটি প্রতিক্রিয়া, যার সাথে আমার সমস্যা ছিল।

কিছু প্রকল্পের সময় আমার কিছু ডেটা বৈধকরণ করা এবং যথাসম্ভব নিশ্চিত হওয়া দরকার যে এটি একটি জাভাস্ক্রিপ্টের সংখ্যাসূচক মান যা গাণিতিক ক্রিয়াকলাপে ব্যবহার করা যেতে পারে।

jQuery এবং কিছু অন্যান্য জাভাস্ক্রিপ্ট লাইব্রেরিতে ইতিমধ্যে সাধারণত বলা হয়ে থাকে এমন একটি ফাংশন অন্তর্ভুক্ত isNumericস্ট্যাকওভারফ্লোতে একটি পোস্টও রয়েছে যা উত্তর হিসাবে ব্যাপকভাবে গ্রহণ করা হয়েছে, একই সাধারণ রুটিন যা পূর্বোক্ত গ্রন্থাগারগুলি ব্যবহার করছে using

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

প্রথমত, উপরোক্ত কোডটি সত্য ফিরে আসবে যদি আর্গুমেন্টটি দৈর্ঘ্যের 1 টি অ্যারে হয় এবং সেই একক উপাদানটি এমন একটি ধরণের ছিল যা উপরের যুক্তি অনুসারে সংখ্যা হিসাবে বিবেচিত হত। আমার মতে, এটি যদি অ্যারে হয় তবে এটির সংখ্যাটি নয়।

এই সমস্যাটি দূর করতে আমি যুক্তি থেকে অ্যারে ছাড়ের জন্য একটি চেক যুক্ত করেছি

function isNumber(n) {
  return Object.prototype.toString.call(n) !== '[object Array]' &&!isNaN(parseFloat(n)) && isFinite(n);
}

অবশ্যই, আপনি এর পরিবর্তে Array.isArrayjquery $.isArrayবা প্রোটোটাইপ ব্যবহার করতে পারেনObject.isArrayObject.prototype.toString.call(n) !== '[object Array]'

আমার দ্বিতীয় সমস্যাটি হ'ল নেগেটিভ হেক্সাডেসিমাল পূর্ণসংখ্যার আক্ষরিক স্ট্রিং ("-0xA" -> -10) সংখ্যা হিসাবে গণনা করা হচ্ছে না। তবে, ইতিবাচক হেক্সাডেসিমাল পূর্ণসংখ্যার আক্ষরিক স্ট্রিং ("0xA" -> 10) সংখ্যার হিসাবে বিবেচিত হয়েছিল। আমি বৈধ সংখ্যা হতে উভয় প্রয়োজন।

আমি তখন এটিকে আমলে নেওয়ার জন্য যুক্তিটি সংশোধন করেছি।

function isNumber(n) {
  return Object.prototype.toString.call(n) !== '[object Array]' &&!isNaN(parseFloat(n)) && isFinite(n.toString().replace(/^-/, ''));
}

যদি আপনি প্রতিটি বার ফাংশনটি ডেকে আওয়াজটি তৈরি করার বিষয়ে উদ্বিগ্ন হন তবে আপনি এটি বন্ধের মধ্যে পুনরায় লিখতে পারেন, এরকম কিছু

var isNumber = (function () {
  var rx = /^-/;

  return function (n) {
      return Object.prototype.toString.call(n) !== '[object Array]' &&!isNaN(parseFloat(n)) && isFinite(n.toString().replace(rx, ''));
  };
}());

তারপরে আমি সিএমএস +30 পরীক্ষার কেস নিয়েছি এবং জেএসফিডেলের উপর পরীক্ষার ক্লোন করে আমার অতিরিক্ত পরীক্ষার কেস এবং আমার উপরে বর্ণিত সমাধান যুক্ত করেছি।

এটি ব্যাপকভাবে গৃহীত / ব্যবহৃত উত্তরটি প্রতিস্থাপন করতে পারে না তবে এটি যদি আপনি আপনার isuumeric ফাংশন থেকে ফলাফল হিসাবে প্রত্যাশা করছেন আরও বেশি হয় তবে আশা করি এটি কিছুটা সহায়ক হবে।

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

আমি চাই যে আমার ইসমেরিক ক্রিয়াকলাপটি কেবল সংখ্যা বা স্ট্রিং বিবেচনা করবে

এটি মাথায় রেখে, এটি ব্যবহার করা ভাল

function isNumber(n) {
  return (Object.prototype.toString.call(n) === '[object Number]' || Object.prototype.toString.call(n) === '[object String]') &&!isNaN(parseFloat(n)) && isFinite(n.toString().replace(/^-/, ''));
}

সমাধান পরীক্ষা করুন

var testHelper = function() {

  var testSuite = function() {
    test("Integer Literals", function() {
      ok(isNumber("-10"), "Negative integer string");
      ok(isNumber("0"), "Zero string");
      ok(isNumber("5"), "Positive integer string");
      ok(isNumber(-16), "Negative integer number");
      ok(isNumber(0), "Zero integer number");
      ok(isNumber(32), "Positive integer number");
      ok(isNumber("040"), "Octal integer literal string");
      ok(isNumber(0144), "Octal integer literal");
      ok(isNumber("-040"), "Negative Octal integer literal string");
      ok(isNumber(-0144), "Negative Octal integer literal");
      ok(isNumber("0xFF"), "Hexadecimal integer literal string");
      ok(isNumber(0xFFF), "Hexadecimal integer literal");
      ok(isNumber("-0xFF"), "Negative Hexadecimal integer literal string");
      ok(isNumber(-0xFFF), "Negative Hexadecimal integer literal");
    });

    test("Foating-Point Literals", function() {
      ok(isNumber("-1.6"), "Negative floating point string");
      ok(isNumber("4.536"), "Positive floating point string");
      ok(isNumber(-2.6), "Negative floating point number");
      ok(isNumber(3.1415), "Positive floating point number");
      ok(isNumber(8e5), "Exponential notation");
      ok(isNumber("123e-2"), "Exponential notation string");
    });

    test("Non-Numeric values", function() {
      equals(isNumber(""), false, "Empty string");
      equals(isNumber("        "), false, "Whitespace characters string");
      equals(isNumber("\t\t"), false, "Tab characters string");
      equals(isNumber("abcdefghijklm1234567890"), false, "Alphanumeric character string");
      equals(isNumber("xabcdefx"), false, "Non-numeric character string");
      equals(isNumber(true), false, "Boolean true literal");
      equals(isNumber(false), false, "Boolean false literal");
      equals(isNumber("bcfed5.2"), false, "Number with preceding non-numeric characters");
      equals(isNumber("7.2acdgs"), false, "Number with trailling non-numeric characters");
      equals(isNumber(undefined), false, "Undefined value");
      equals(isNumber(null), false, "Null value");
      equals(isNumber(NaN), false, "NaN value");
      equals(isNumber(Infinity), false, "Infinity primitive");
      equals(isNumber(Number.POSITIVE_INFINITY), false, "Positive Infinity");
      equals(isNumber(Number.NEGATIVE_INFINITY), false, "Negative Infinity");
      equals(isNumber(new Date(2009, 1, 1)), false, "Date object");
      equals(isNumber(new Object()), false, "Empty object");
      equals(isNumber(function() {}), false, "Instance of a function");
      equals(isNumber([]), false, "Empty Array");
      equals(isNumber(["-10"]), false, "Array Negative integer string");
      equals(isNumber(["0"]), false, "Array Zero string");
      equals(isNumber(["5"]), false, "Array Positive integer string");
      equals(isNumber([-16]), false, "Array Negative integer number");
      equals(isNumber([0]), false, "Array Zero integer number");
      equals(isNumber([32]), false, "Array Positive integer number");
      equals(isNumber(["040"]), false, "Array Octal integer literal string");
      equals(isNumber([0144]), false, "Array Octal integer literal");
      equals(isNumber(["-040"]), false, "Array Negative Octal integer literal string");
      equals(isNumber([-0144]), false, "Array Negative Octal integer literal");
      equals(isNumber(["0xFF"]), false, "Array Hexadecimal integer literal string");
      equals(isNumber([0xFFF]), false, "Array Hexadecimal integer literal");
      equals(isNumber(["-0xFF"]), false, "Array Negative Hexadecimal integer literal string");
      equals(isNumber([-0xFFF]), false, "Array Negative Hexadecimal integer literal");
      equals(isNumber([1, 2]), false, "Array with more than 1 Positive interger number");
      equals(isNumber([-1, -2]), false, "Array with more than 1 Negative interger number");
    });
  }

  var functionsToTest = [

    function(n) {
      return !isNaN(parseFloat(n)) && isFinite(n);
    },

    function(n) {
      return !isNaN(n) && !isNaN(parseFloat(n));
    },

    function(n) {
      return !isNaN((n));
    },

    function(n) {
      return !isNaN(parseFloat(n));
    },

    function(n) {
      return typeof(n) != "boolean" && !isNaN(n);
    },

    function(n) {
      return parseFloat(n) === Number(n);
    },

    function(n) {
      return parseInt(n) === Number(n);
    },

    function(n) {
      return !isNaN(Number(String(n)));
    },

    function(n) {
      return !isNaN(+('' + n));
    },

    function(n) {
      return (+n) == n;
    },

    function(n) {
      return n && /^-?\d+(\.\d+)?$/.test(n + '');
    },

    function(n) {
      return isFinite(Number(String(n)));
    },

    function(n) {
      return isFinite(String(n));
    },

    function(n) {
      return !isNaN(n) && !isNaN(parseFloat(n)) && isFinite(n);
    },

    function(n) {
      return parseFloat(n) == n;
    },

    function(n) {
      return (n - 0) == n && n.length > 0;
    },

    function(n) {
      return typeof n === 'number' && isFinite(n);
    },

    function(n) {
      return !Array.isArray(n) && !isNaN(parseFloat(n)) && isFinite(n.toString().replace(/^-/, ''));
    }

  ];


  // Examines the functionsToTest array, extracts the return statement of each function
  // and fills the toTest select element.
  var fillToTestSelect = function() {
    for (var i = 0; i < functionsToTest.length; i++) {
      var f = functionsToTest[i].toString();
      var option = /[\s\S]*return ([\s\S]*);/.exec(f)[1];
      $("#toTest").append('<option value="' + i + '">' + (i + 1) + '. ' + option + '</option>');
    }
  }

  var performTest = function(functionNumber) {
    reset(); // Reset previous test
    $("#tests").html(""); //Clean test results
    isNumber = functionsToTest[functionNumber]; // Override the isNumber global function with the one to test
    testSuite(); // Run the test

    // Get test results
    var totalFail = 0;
    var totalPass = 0;
    $("b.fail").each(function() {
      totalFail += Number($(this).html());
    });
    $("b.pass").each(function() {
      totalPass += Number($(this).html());
    });
    $("#testresult").html(totalFail + " of " + (totalFail + totalPass) + " test failed.");

    $("#banner").attr("class", "").addClass(totalFail > 0 ? "fail" : "pass");
  }

  return {
    performTest: performTest,
    fillToTestSelect: fillToTestSelect,
    testSuite: testSuite
  };
}();


$(document).ready(function() {
  testHelper.fillToTestSelect();
  testHelper.performTest(0);

  $("#toTest").change(function() {
    testHelper.performTest($(this).children(":selected").val());
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
<script src="https://rawgit.com/Xotic750/testrunner-old/master/testrunner.js" type="text/javascript"></script>
<link href="https://rawgit.com/Xotic750/testrunner-old/master/testrunner.css" rel="stylesheet" type="text/css">
<h1>isNumber Test Cases</h1>

<h2 id="banner" class="pass"></h2>

<h2 id="userAgent">Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11</h2>

<div id="currentFunction"></div>

<div id="selectFunction">
  <label for="toTest" style="font-weight:bold; font-size:Large;">Select function to test:</label>
  <select id="toTest" name="toTest">
  </select>
</div>

<div id="testCode"></div>

<ol id="tests">
  <li class="pass">
    <strong>Integer Literals <b style="color:black;">(0, 10, 10)</b></strong>

    <ol style="display: none;">
      <li class="pass">Negative integer string</li>

      <li class="pass">Zero string</li>

      <li class="pass">Positive integer string</li>

      <li class="pass">Negative integer number</li>

      <li class="pass">Zero integer number</li>

      <li class="pass">Positive integer number</li>

      <li class="pass">Octal integer literal string</li>

      <li class="pass">Octal integer literal</li>

      <li class="pass">Hexadecimal integer literal string</li>

      <li class="pass">Hexadecimal integer literal</li>
    </ol>
  </li>

  <li class="pass">
    <strong>Foating-Point Literals <b style="color:black;">(0, 6, 6)</b></strong>

    <ol style="display: none;">
      <li class="pass">Negative floating point string</li>

      <li class="pass">Positive floating point string</li>

      <li class="pass">Negative floating point number</li>

      <li class="pass">Positive floating point number</li>

      <li class="pass">Exponential notation</li>

      <li class="pass">Exponential notation string</li>
    </ol>
  </li>

  <li class="pass">
    <strong>Non-Numeric values <b style="color:black;">(0, 18, 18)</b></strong>

    <ol style="display: none;">
      <li class="pass">Empty string: false</li>

      <li class="pass">Whitespace characters string: false</li>

      <li class="pass">Tab characters string: false</li>

      <li class="pass">Alphanumeric character string: false</li>

      <li class="pass">Non-numeric character string: false</li>

      <li class="pass">Boolean true literal: false</li>

      <li class="pass">Boolean false literal: false</li>

      <li class="pass">Number with preceding non-numeric characters: false</li>

      <li class="pass">Number with trailling non-numeric characters: false</li>

      <li class="pass">Undefined value: false</li>

      <li class="pass">Null value: false</li>

      <li class="pass">NaN value: false</li>

      <li class="pass">Infinity primitive: false</li>

      <li class="pass">Positive Infinity: false</li>

      <li class="pass">Negative Infinity: false</li>

      <li class="pass">Date object: false</li>

      <li class="pass">Empty object: false</li>

      <li class="pass">Instance of a function: false</li>
    </ol>
  </li>
</ol>

<div id="main">
  This page contains tests for a set of isNumber functions. To see them, take a look at the source.
</div>

<div>
  <p class="result">Tests completed in 0 milliseconds.
    <br>0 tests of 0 failed.</p>
</div>


2
এটি আমার দৃষ্টিতে সর্বাধিক ieldালিত কার্য; শেষটা. গৃহীত উত্তর সম্ভবত সমস্ত ক্ষেত্রে 99.99% কভার করে তবে এটির মধ্যে সম্ভবত একটির 100% থাকে) একটি ছোট ওভারহেডযুক্ত কেস।
স্যামুয়েল

আপনি "99,999" ফুটিং-পয়েন্ট আক্ষরিক সম্পর্কে ভুলে গেছেন। এটি সমস্ত ইউরোপের একটি বৈধ সংখ্যা যা ইউকে
উপস্থাপিত হয়েছে

এটি ভুলে যায়নি, এটি জাভাস্ক্রিপ্ট সংখ্যাগুলির অর্থে আমি একটি সংখ্যাকে বিবেচনা করি না, ওপি আরও বলেছিলIsNumeric('99,999') => false
Xotic750

34

হ্যাঁ, বিল্ট- isNaN(object)ইনটি কোনও রেজেক্স পার্সিংয়ের চেয়ে অনেক দ্রুত হবে কারণ এটি ফ্লাইতে ব্যাখ্যার পরিবর্তে বিল্ট-ইন এবং সংকলন করা হয়েছে।

যদিও আপনি যা খুঁজছেন তার থেকে ফলাফল কিছুটা আলাদা ( চেষ্টা করে দেখুন ):

                                              // IS NUMERIC
document.write(!isNaN('-1') + "<br />");      // true
document.write(!isNaN('-1.5') + "<br />");    // true
document.write(!isNaN('0') + "<br />");       // true
document.write(!isNaN('0.42') + "<br />");    // true
document.write(!isNaN('.42') + "<br />");     // true
document.write(!isNaN('99,999') + "<br />");  // false
document.write(!isNaN('0x89f') + "<br />");   // true
document.write(!isNaN('#abcdef') + "<br />"); // false
document.write(!isNaN('1.2.3') + "<br />");   // false
document.write(!isNaN('') + "<br />");        // true
document.write(!isNaN('blah') + "<br />");    // false

18

ফাংশনটি ব্যবহার করুন isNaN। আমি বিশ্বাস করি যদি আপনি !isNaN(yourstringhere)এটির জন্য পরীক্ষা করেন তবে এই পরিস্থিতিতে যে কোনও একটির জন্য এটি দুর্দান্ত কাজ করে।


দ্রষ্টব্য
:! IsNaN

যদি (! (x == নাল || isNaN (x))) সতর্কতা ("isNumeric"); // তবে এই সমাধান 0x40 গ্রহণ করে তাই অপ্টটি যা চেয়েছিল তা এখনও এটি নয়।
কিছু

নোট করুন যে isNaN ("ইনফিনিটি") === মিথ্যা, যা সম্ভবত আপনি যা চান তা নয় (তবে বাস্তব জীবনেও ঘটবে না)।
এরিক হেসেলিংক

16

JQuery 1.7, যেহেতু আপনি ব্যবহার করতে পারেন jQuery.isNumeric():

$.isNumeric('-1');      // true
$.isNumeric('-1.5');    // true
$.isNumeric('0');       // true
$.isNumeric('0.42');    // true
$.isNumeric('.42');     // true
$.isNumeric('0x89f');   // true (valid hexa number)
$.isNumeric('99,999');  // false
$.isNumeric('#abcdef'); // false
$.isNumeric('1.2.3');   // false
$.isNumeric('');        // false
$.isNumeric('blah');    // false

আপনি কেবল যা বলেছিলেন তার বিপরীতে 0x89fএকটি বৈধ সংখ্যা (হেক্সা)


ওপি বৈধ দশমিক সংখ্যা চায় , তাই jQuery isNumeric অনুসারে নয়। এটি খুব বড় সংখ্যক ক্ষেত্রেও ব্যর্থ হয়।
রবজি 21

13

এটি যেমন RegExp ছাড়াই করা যায়

function IsNumeric(data){
    return parseFloat(data)==data;
}

5
যদি আমরা == ব্যবহার করি তবে এটি স্ট্রিং হিসাবে উপস্থাপিত সংখ্যার জন্যও সত্য হবে। সুতরাং "42" "==" ক্ষেত্রে বৈধ সংখ্যা হিসাবে গণ্য হবে এবং ===
অ্যাকোয়াটিক

এটি "-0।", "-0", ".0" এবং "0" এ সত্য দেয়
জানুস ট্রয়লসেন

8

আমি বুঝতে পারি যে মূল প্রশ্নটি jQuery উল্লেখ করে নি, তবে আপনি যদি jQuery ব্যবহার করেন তবে আপনি এটি করতে পারেন:

$.isNumeric(val)

সহজ।

https://api.jquery.com/jQuery.isNumeric/ (jQuery 1.7 হিসাবে)


8
return (input - 0) == input && input.length > 0;

আমার জন্য কাজ করেনি। আমি যখন একটি সতর্কতা রাখি এবং পরীক্ষা করেছিলাম, input.lengthতখন undefined। আমি মনে করি পূর্ণসংখ্যার দৈর্ঘ্য যাচাই করার মতো কোনও সম্পত্তি নেই। তাই আমি যা করেছি তা ছিল

var temp = '' + input;
return (input - 0) == input && temp.length > 0;

এটা ভাল কাজ করে।


7

যদি আমি ভুল না হয়ে থাকি তবে এটি কনস্ট্যান্ট ( Infinity, NaN) এবং সাইন অপারেটরগুলি বাদ দিয়ে কোনও বৈধ জাভাস্ক্রিপ্ট নম্বর মানের সাথে মেলে উচিত +/ -(কারণ তারা প্রকৃতপক্ষে আমার সংখ্যার অংশ নয়, তারা পৃথক অপারেটর):

টোকনাইজারের জন্য আমার এটি দরকার ছিল, যেখানে মূল্যায়নের জন্য জাভাস্ক্রিপ্টে নম্বরটি পাঠানো কোনও বিকল্প ছিল না ... এটি অবশ্যই স্বল্পতম নিয়মিত অভিব্যক্তি নয়, তবে আমি বিশ্বাস করি এটি জাভাস্ক্রিপ্টের নম্বর সিনট্যাক্সের সমস্ত সূক্ষ্ম সূক্ষ্মতা পেয়েছে।

/^(?:(?:(?:[1-9]\d*|\d)\.\d*|(?:[1-9]\d*|\d)?\.\d+|(?:[1-9]\d*|\d)) 
(?:[e]\d+)?|0[0-7]+|0x[0-9a-f]+)$/i

বৈধ সংখ্যা অন্তর্ভুক্ত করবে:

 - 0
 - 00
 - 01
 - 10
 - 0e1
 - 0e01
 - .0
 - 0.
 - .0e1
 - 0.e1
 - 0.e00
 - 0xf
 - 0Xf

অবৈধ সংখ্যা হবে

 - 00e1
 - 01e1
 - 00.0
 - 00x0
 - .
 - .e0

7

@ সিএমএসের উত্তরের সাথে আমার যে সমস্যা হয়েছিল তা হ'ল বহিরাগত NaNএবং ইনফিনিটি, যা অনেক পরিস্থিতিতে দরকারী নম্বর। এর জন্য যাচাই করার একটি উপায় NaNহ'ল সংখ্যার মানগুলি যা তাদের সমান হয় না তা পরীক্ষা করা NaN != NaN! সুতরাং সত্যিই 3 টি পরীক্ষা রয়েছে যা আপনি মোকাবেলা করতে চাই ...

function isNumber(n) {
  n = parseFloat(n);
  return !isNaN(n) || n != n;
}
function isFiniteNumber(n) {
  n = parseFloat(n);
  return !isNaN(n) && isFinite(n);
}    
function isComparableNumber(n) {
  n = parseFloat(n);
  return (n >=0 || n < 0);
}

isFiniteNumber('NaN')
false
isFiniteNumber('OxFF')
true
isNumber('NaN')
true
isNumber(1/0-1/0)
true
isComparableNumber('NaN')
false
isComparableNumber('Infinity')
true

আমার ইস্পামেবল নাম্বারটি অন্য মার্জিত উত্তরের খুব কাছে , তবে হেক্স এবং সংখ্যার অন্যান্য স্ট্রিং উপস্থাপনা পরিচালনা করে।



6

আমি নিম্নলিখিত যুক্ত করতে চাই:

1. IsNumeric('0x89f') => true
2. IsNumeric('075') => true

ইতিবাচক হেক্স নম্বরগুলি শুরু হয় 0xএবং নেতিবাচক হেক্স নম্বরগুলি শুরু হয় -0x। ইতিবাচক অক্ট সংখ্যাগুলি শুরু হয় 0এবং নেতিবাচক অক্ট সংখ্যাগুলি শুরু হয় -0। এটি ইতিমধ্যে বিবেচনা করা হয়েছে যা বেশিরভাগ গ্রহণ করে তবে এতে হেক্স এবং অষ্টাল সংখ্যা, নেতিবাচক বৈজ্ঞানিক, অনন্ত অন্তর্ভুক্ত রয়েছে এবং দশমিক বৈজ্ঞানিক ( 4e3.2বৈধ নয়) সরিয়ে নিয়েছেন ।

function IsNumeric(input){
  var RE = /^-?(0|INF|(0[1-7][0-7]*)|(0x[0-9a-fA-F]+)|((0|[1-9][0-9]*|(?=[\.,]))([\.,][0-9]+)?([eE]-?\d+)?))$/;
  return (RE.test(input));
}

6

আমি মনে করি পার্সফ্লোট ফাংশন এখানে সমস্ত কাজ করতে পারে। নীচের ফাংশনটি সহ এই পৃষ্ঠায় সমস্ত পরীক্ষা পাস করে isNumeric(Infinity) == true:

function isNumeric(n) {

    return parseFloat(n) == n;
}

হ্যাঁ, আমিও এই সিদ্ধান্তে এসেছি। আমি এই পদ্ধতিটি ব্যবহার করে অ্যারে যেমন চিকিত্সা করি সেটিকেও আমি বেশ পছন্দ করি; একটি একক মানযুক্ত একটি অ্যারে সেই মান হিসাবে গণ্য হয়, তবে সমস্ত কিছু ব্যর্থ হয়: IsNumeric([3]) == true; IsNumeric([]) == false; IsNumeric([3, 4]) == false; তবে আমি কল্পনা করতে পারি যে এটি স্বাদের বিষয়!
মার্ক বীরবেক

4

যোগ করার জন্য কয়েকটি পরীক্ষা:

IsNumeric('01.05') => false
IsNumeric('1.') => false
IsNumeric('.') => false

আমি এটি নিয়ে এসেছি:

function IsNumeric(input) {
    return /^-?(0|[1-9]\d*|(?=\.))(\.\d+)?$/.test(input);
}

সমাধানটি কভার করে:

  • শুরুতে একটি alচ্ছিক নেতিবাচক চিহ্ন
  • একটি একক শূন্য, বা এক বা একাধিক সংখ্যা 0 দিয়ে শুরু হয় না, বা পিরিয়ড অনুসারে এত দীর্ঘ কিছুই হয় না
  • 1 বা তার বেশি সংখ্যার পরে একটি পিরিয়ড

4

একটি পূর্ণসংখ্যা মান যাচাই করা যেতে পারে:

function isNumeric(value) {
    var bool = isNaN(+value));
    bool = bool || (value.indexOf('.') != -1);
    bool = bool || (value.indexOf(",") != -1);
    return !bool;
};

এই উপায় সহজ এবং দ্রুত! সমস্ত পরীক্ষা পরীক্ষা করা হয়!


4

এখানে একটি লিল বিট উন্নত সংস্করণ (সম্ভবত খুব দ্রুততম উপায়) যা আমি সঠিক jQuery এর বৈকল্পিকের পরিবর্তে ব্যবহার করি, আমি জানি না কেন তারা এটিকে ব্যবহার করে না:

function isNumeric(val) {
    return !isNaN(+val) && isFinite(val);
}

JQuery এর সংস্করণের downside হয় যে আপনি যদি numerics নেতৃস্থানীয় ও অক্ষর trailing মতো একটি স্ট্রিং পাস হয় সাংখ্যিক ভগ্নাংশ আউট বের করে এবং 123 আসতে হবে, কিন্তু, দ্বিতীয় পাহারা তবুও এটি ব্যর্থ হবে। অ্যানারি অপারেটরের সাথে এটি প্রথম প্রহরীতে মারা যাবে যেহেতু এই জাতীয় সংকরগুলির জন্য NaN নিক্ষেপ করে :) একটি সামান্য পারফরম্যান্স তবুও আমি মনে করি একটি দৃ .় অর্থপূর্ণ লাভ আছে।"123abc"parseFloat | parseIntisFinite+


2
অবিচ্ছিন্ন থেকে সাবধান থাকুন '+' কোনও বস্তুতে মান (ওফোন) আহ্বান করবে - এই জিসফিডলটি দেখুন । এছাড়াও এটি নেতৃস্থানীয় উত্তর হিসাবে হোয়াইটস্পেস নেতৃস্থানীয় জন্য ব্যর্থ।
earcam

3

আমার সমাধান,

function isNumeric(input) {
    var number = /^\-{0,1}(?:[0-9]+){0,1}(?:\.[0-9]+){0,1}$/i;
    var regex = RegExp(number);
    return regex.test(input) && input.length>0;
}

এটি প্রতিটি পরিস্থিতিতে কাজ করে বলে মনে হচ্ছে তবে আমি ভুল হতে পারি।


যদি আপনি অকারণে অক্ষরগুলি অবলম্বন না করেন, এর ?জন্য {0,1}এবং এর \dজন্য ব্যবহার করেন তবে এই রেজেক্সটি কম বিভ্রান্ত হবে [0-9]। এছাড়াও +এবং তারপরে এটি মোড়ানো (?:){0,1}, আপনি পাশাপাশি *(অ) ক্যাপচারিং গ্রুপগুলি ব্যবহার করতে এবং ভুলে যেতে পারেন ।
অ্যালেক্স


3

এই কাজ করা উচিত. এখানে প্রদত্ত কয়েকটি ফাংশন ত্রুটিযুক্ত, এখানে অন্য যে কোনও কার্যের চেয়ে দ্রুত হওয়া উচিত।

        function isNumeric(n)
        {
            var n2 = n;
            n = parseFloat(n);
            return (n!='NaN' && n2==n);
        }

ব্যাখ্যা:

নিজের একটি অনুলিপি তৈরি করুন, তারপরে সংখ্যাটিকে ফ্লোটে রূপান্তর করুন, তারপরে নিজেকে মূল সংখ্যার সাথে তুলনা করুন, যদি এটি এখনও একটি সংখ্যা হয়, (পূর্ণসংখ্যা বা ভাসা নির্বিশেষে) এবং মূল সংখ্যার সাথে মেলে, এর অর্থ, এটি আসলে একটি সংখ্যা।

এটি সংখ্যাযুক্ত স্ট্রিং পাশাপাশি প্লেইন সংখ্যার সাথে কাজ করে works হেক্সাডেসিমাল সংখ্যা নিয়ে কাজ করে না।

সতর্কতা: আপনার নিজের ঝুঁকিতে ব্যবহার করুন, কোনও গ্যারান্টি নেই।


4
আপনার নিজের ঝুঁকিতে ব্যবহার করুন, গ্যারান্টি নেই যে আমি কোডটি ব্যবহার করব না যা সম্পর্কে লেখক আত্মবিশ্বাসী নয়;)
অ্যালেক্স

1
@ অ্যালেক্স, জিনিস সম্পর্কে কমপক্ষে আপনার নিজস্ব মতামত থাকতে হবে। শুধু সব সময় সমালোচনা করবেন না।
স্টিয়ার্ট এমবোফানা

3

উত্তরগুলির falseকোনওটিই খালি স্ট্রিংয়ের জন্য ফিরে আসে না , এটির জন্য একটি সমাধান ...

function is_numeric(n)
{
 return (n != '' && !isNaN(parseFloat(n)) && isFinite(n));
}

3

কোনও ভেরিয়েবেলে একটি বৈধ সংখ্যা রয়েছে এবং কেবল কোনও স্ট্রিং নয় যা একটি সংখ্যার মতো দেখাচ্ছে, Number.isFinite(value)তা ব্যবহার করা যেতে পারে check

ES2015 সাল থেকে এটি ভাষার অংশ

উদাহরণ:

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
আমি অনুমান করব যে ব্যবহারকারীরা ইনপুট পার্স করার জন্য এই প্রশ্নটি উল্লেখ করেছেন যা সাধারণত একটি স্ট্রিং হবে । এই উত্তরগুলি সেই ক্ষেত্রে ব্যর্থ হয়, যেমন আপনি উদাহরণগুলিতে সঠিকভাবে Number.isFinite('0') -> false
মাইকেল হারেন

তুমি পুরোপুরি ঠিক আমি এই পরিষ্কার ফ্রন্ট আপ করার চেষ্টা করেছি।
অ্যাডিয়াস

3
function inNumeric(n){
   return Number(n).toString() === n;
}

যদি n হয় Number(n)তবে সংখ্যাসূচক মানটি toString()ফিরে আসবে এবং এটিকে আবার স্ট্রিংয়ে ফিরিয়ে আনবে। কিন্তু যদি এন সাংখ্যিক নয় Number(n)ফিরে আসবে NaNতাই এটি আসল মিল করা হবে নাn


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

2

আমি বুঝতে পেরেছি এটির বহুবার উত্তর দেওয়া হয়েছে, তবে নিম্নলিখিতটি একটি শালীন প্রার্থী যা কিছু পরিস্থিতিতে কার্যকর হতে পারে।

এটি লক্ষ্য করা উচিত যে এটি ধরে নিয়েছে যে '.42' কোনও সংখ্যা নয় এবং '4.' কোনও সংখ্যা নয়, তাই এটি বিবেচনায় নেওয়া উচিত।

function isDecimal(x) {
  return '' + x === '' + +x;
}

function isInteger(x) {
  return '' + x === '' + parseInt(x);
}

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

function testIsNumber(f) {
  return f('-1') && f('-1.5') && f('0') && f('0.42')
    && !f('.42') && !f('99,999') && !f('0x89f')
    && !f('#abcdef') && !f('1.2.3') && !f('') && !f('blah');
}

এখানে ধারণাটি হ'ল প্রতিটি সংখ্যায় বা পূর্ণসংখ্যার একটি "ক্যানোনিকাল" স্ট্রিং প্রতিনিধিত্ব থাকে এবং প্রতিটি অ-প্রৌ .় উপস্থাপনা প্রত্যাখ্যান করা উচিত। সুতরাং আমরা একটি নম্বর এবং পিছনে কাস্ট, এবং দেখুন ফলাফলটি মূল স্ট্রিং কিনা।

এই ফাংশনগুলি আপনার জন্য কার্যকর কিনা তা ব্যবহারের ক্ষেত্রে নির্ভর করে। একটি বৈশিষ্ট্য হ'ল পৃথক স্ট্রিংগুলি স্বতন্ত্র সংখ্যা উপস্থাপন করে (যদি উভয়ই পরীক্ষায় পাস করে isNumber())।

এটি প্রাসঙ্গিক সম্পত্তির নাম হিসাবে সংখ্যার জন্য যেমন প্রাসঙ্গিক।

var obj = {};
obj['4'] = 'canonical 4';
obj['04'] = 'alias of 4';
obj[4];  // prints 'canonical 4' to the console.

2

নকআউটজেস ইনবিল্ড গ্রন্থাগার বৈধতা ফাংশন

এটি প্রসারিত করে ক্ষেত্রটি বৈধ হয়ে উঠবে

1) নম্বর

self.number = ko.observable(numberValue).extend ({সংখ্যা: সত্য}) ;

পরীক্ষা ক্ষেত্রে

numberValue = '0.0'    --> true
numberValue = '0'      --> true
numberValue = '25'     --> true
numberValue = '-1'     --> true
numberValue = '-3.5'   --> true
numberValue = '11.112' --> true
numberValue = '0x89f'  --> false
numberValue = ''       --> false
numberValue = 'sfsd'   --> false
numberValue = 'dg##$'  --> false

2) অঙ্ক

self.number = ko.observable(numberValue).extend ({ডিজিট: সত্য}) ;

পরীক্ষা ক্ষেত্রে

numberValue = '0'      --> true
numberValue = '25'     --> true
numberValue = '0.0'    --> false
numberValue = '-1'     --> false
numberValue = '-3.5'   --> false
numberValue = '11.112' --> false
numberValue = '0x89f'  --> false
numberValue = ''       --> false
numberValue = 'sfsd'   --> false
numberValue = 'dg##$'  --> false

3) সর্বনিম্ন এবং সর্বাধিক

self.number = ko.observable(numberValue).extend ({min: 5})। প্রসারিত (সর্বোচ্চ সর্বোচ্চ: 10}) ;

এই ক্ষেত্রটি কেবল 5 এবং 10 এর মধ্যে মান গ্রহণ করে

পরীক্ষা ক্ষেত্রে

numberValue = '5'    --> true
numberValue = '6'    --> true
numberValue = '6.5'  --> true
numberValue = '9'    --> true
numberValue = '11'   --> false
numberValue = '0'    --> false
numberValue = ''    --> false

2

আপনার যদি দশমিকের একটি বিশেষ সেট y যাচাই করতে হয় তবে আপনি এই সাধারণ জাভাস্ক্রিপ্টটি ব্যবহার করতে পারেন:

http://codesheet.org/codesheet/x1kI7hAD

<input type="text" name="date" value="" pattern="[0-9]){1,2}(\.){1}([0-9]){2}" maxlength="6" placeholder="od npr.: 16.06" onchange="date(this);" />

জাভাস্ক্রিপ্ট:

function date(inputField) {        
  var isValid = /^([0-9]){1,2}(\.){1}([0-9]){2}$/.test(inputField.value);   
  if (isValid) {
    inputField.style.backgroundColor = '#bfa';
  } else {
    inputField.style.backgroundColor = '#fba';
  }
  return isValid;
}

2

isNumeric=(el)=>{return Boolean(parseFloat(el)) && isFinite(el)}

খুব আলাদা কিছু না তবে আমরা বুলিয়ান কনস্ট্রাক্টর ব্যবহার করতে পারি

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