javascript - (অন্তর্নির্মিত) একটি স্ট্রিং একটি বৈধ সংখ্যা কিনা তা পরীক্ষা করতে জাভাস্ক্রিপ্টে উপায়




validation numeric (17)

একটি পরিবর্তনশীল (একটি স্ট্রিং সহ) একটি সংখ্যা কিনা তা পরীক্ষা করতে, এটি একটি সংখ্যা না কিনা তা পরীক্ষা করুন:

এই ভেরিয়েবল ধারণকারী একটি স্ট্রিং বা সংখ্যা কিনা নির্বিশেষে কাজ করে।

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
isNaN('')          // false

কিন্তু parseInt() একমত না:

parseInt('')       // NaN

আমি আশা করি পুরনো ভিবি 6 IsNumeric() ফাংশন হিসাবে একই ধারণাগত স্থানটিতে কিছু আছে?


PFB কাজ সমাধান:

 function(check){ 
    check = check + "";
    var isNumber =   check.trim().length>0? !isNaN(check):false;
    return isNumber;
    }

আচ্ছা, আমি এই তৈরি করছি আমি তৈরি করেছি ...

এটা এখন পর্যন্ত কাজ করা হয়েছে:

function checkNumber(value) {
    if ( value % 1 == 0 )
    return true;
    else
    return false;
}

যদি আপনি এটির সাথে কোন সমস্যা স্পট করেন তবে দয়া করে আমাকে বলুন।


আপনি তার কন্সট্রাকটর একটি যুক্তি পাস যখন Number ফলাফল ব্যবহার করতে পারেন।

যদি যুক্তি (একটি স্ট্রিং) কোনও সংখ্যার রূপান্তর করা যায় না, এটি NaN প্রদান করে, যাতে আপনি প্রদত্ত স্ট্রিংটি বৈধ সংখ্যা কিনা তা নির্ধারণ করতে পারেন।

নোট: খালি স্ট্রিং বা '\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

আমার সমাধান:

// 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;
 };

আপনি বিশেষ প্রয়োজন মেটানোর জন্য, লুপ ভিতরে অতিরিক্ত শর্ত যোগ করতে পারেন।


আমি এই সরলতা পছন্দ।

Number.isNaN(Number(value))

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

প্রকারের টাইপগার্ড

isNotNumber(value: string | number): value is string {
    return Number.isNaN(Number(this.smartImageWidth));
}
isNumber(value: string | number): value is number {
    return Number.isNaN(Number(this.smartImageWidth)) === false;
}

ধরুন আপনার কাছে একটি সম্পত্তি width যা number | string number | string । আপনি একটি স্ট্রিং কিনা তা উপর ভিত্তি করে যুক্তি করতে চান।

var width: number|string;
width = "100vw";

if (isNotNumber(width)) 
{
    // the compiler knows that width here must be a string
    if (width.endsWith('vw')) 
    {
        // we have a 'width' such as 100vw
    } 
}
else 
{
    // the compiler is smart and knows width here must be number
    var doubleWidth = width * 2;    
}

টাইপ গার্ড শুধুমাত্র string হতে if বিবৃতির মধ্যে width প্রকারকে সীমাবদ্ধ করতে যথেষ্ট স্মার্ট। এটি কম্পাইলারকে width.endsWith(...) সাথে অনুমতি দেয় width.endsWith(...) যা টাইপটি string | number অনুমতি দেয় না string | number

আপনি যা চান তা টাইপগার্ডকে কল করতে পারেন isNotNumber , isNumber , isString , isNotString কিন্তু আমি মনে করি isString দ্বিধান্বিত এবং পড়ার জন্য কঠিন।


আমি পরীক্ষা করেছি এবং মাইকেল এর সমাধান সেরা। উপরে তার উত্তরের জন্য ভোট দিন (এই পৃষ্ঠাটি অনুসন্ধান করুন "যদি আপনি সত্যিই এটি নিশ্চিত করতে চান যে স্ট্রিংটি নিশ্চিত করতে চান")। মূলত, তার উত্তর এই হল:

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 /, null, "", true, false, [] (এবং অন্যদের?)


আমি সম্প্রতি একটি পরিবর্তনশীল একটি বৈধ সংখ্যা নিশ্চিত করার উপায় সম্পর্কে একটি নিবন্ধ লিখেছি: https://github.com/jehugaleahsa/artifacts/blob/master/2018/typescript_num_hack.md নিবন্ধটি ফ্লোটিং পয়েন্ট বা পূর্ণসংখ্যা কীভাবে নিশ্চিত করতে হবে তা ব্যাখ্যা করে। গুরুত্বপূর্ণ ( +x বনাম ~~x )।

নিবন্ধটি ভেরিয়েবলটিকে একটি string বা একটি number দিয়ে শুরু করতে এবং trim উপলব্ধ / polyfilled অনুমান করে। এটি অন্যান্য ধরনের, হ্যান্ডেল এটি প্রসারিত করা কঠিন হবে না। এখানে এর মাংস আছে:

// 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 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

একটি "অন্তর্নির্মিত" সমাধান খুঁজে বের করার চেষ্টা করার জন্য মাথা ব্যাথা সংরক্ষণ করুন।

একটি ভাল উত্তর নেই, এবং এই থ্রেড মধ্যে অতিশয় আপত্তিকর উত্তর ভুল।

npm install is-number

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

console.log(+[]); //=> 0
console.log(+''); //=> 0
console.log(+'   '); //=> 0
console.log(typeof NaN); //=> 'number'

কেন 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));
};

আমি এইগুলি খুব বেশি পরীক্ষা করে নিই না, অন্য কয়েকটি উপায়ে আমি কয়েকটি ব্যবহার-কেস পরীক্ষা করে দেখি, যা আমার বর্তমান পরিস্থিতির সাথে আঘাত করবে, যা সব খুব সাধারণ স্টাফ। এটি একটি "স্থায়ী-উপর-কাঁধের-দৈত্য" পরিস্থিতি।


পুরানো প্রশ্ন, কিন্তু প্রদত্ত উত্তরগুলিতে অনেকগুলি পয়েন্ট অনুপস্থিত।

বৈজ্ঞানিক স্বরলিপি.

!isNaN('1e+30') true , তবে বেশিরভাগ ক্ষেত্রে যখন লোকেরা সংখ্যাকে জিজ্ঞাসা করে, তারা 1e+30 মতো জিনিসগুলি মেলে না।

বড় ভাসমান সংখ্যা অদ্ভুত আচরণ করতে পারে

পর্যবেক্ষণ করুন (Node.js ব্যবহার করে):

> 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 সংখ্যাগুলি 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);
  }

যাইহোক, এমনকি এই এক সম্পূর্ণ থেকে। নেতৃস্থানীয় জিরো এখানে পরিচালনা করা হয় না, কিন্তু তারা দৈর্ঘ্য পরীক্ষা স্ক্রু না।


যদি আপনি সত্যিই নিশ্চিত করতে চান যে একটি স্ট্রিংটিতে শুধুমাত্র একটি সংখ্যা রয়েছে, কোন সংখ্যা (পূর্ণসংখ্যা বা ভাসমান বিন্দু), এবং ঠিক একটি নম্বর, আপনি parseFloat() / parseFloat() , Number() , অথবা !isNaN() parseFloat() ব্যবহার করতে পারবেন না নিজেদের. মনে রাখবেন যে !isNaN() প্রকৃতপক্ষে true ফিরে আসছে যখন Number() একটি সংখ্যা ফেরত দেবে এবং false যখন এটি NaN ফেরত 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

আপনার নিজস্ব regex ঘূর্ণায়মান সমস্যাটি হল যে আপনি যদি কোনও ফ্ল্যাটিং পয়েন্ট নম্বর মিলে যাওয়ার জন্য সঠিক রেজেক্স তৈরি না করেন তবে জাভাস্ক্রিপ্ট এটি স্বীকার করে যে আপনি ক্ষেত্রে মিস করবেন না বা যেখানে আপনি না হওয়া উচিত তা সনাক্ত করতে চলেছেন। এমনকি যদি আপনি আপনার নিজের regex রোল করতে পারেন, কেন? এটি করতে সহজভাবে অন্তর্নিহিত উপায় আছে।

যাইহোক, এটি দেখা যাচ্ছে যে Number() (এবং isNaN() ) parseFloat() যখন কোন নম্বরটি ফেরত 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))
}

যদি কেউ এটিকে অনেক দূরে ফেলে তবে আমি এই মুহুর্তে হ্যাকিংয়ের সময় অতিবাহিত করেছি moment.js ( 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

কোন পরামর্শ স্বাগত জানাই। :]


সামান্য বিভ্রান্তিতে আমার প্রচেষ্টা, Pherhaps ভাল সমাধান না

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));           // true
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

স্ট্যাটিক পেতে, প্রবাহ টাইপ পরীক্ষা কম্পাইল করার জন্য আপনি প্রবাহ লাইব্রার Y এর মতো প্রকারের ব্যবহার করতে পারেন। অবশ্যই ব্যবহারকারীর ইনপুট জন্য ভয়ঙ্কর দরকারী।

// @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





numeric