Check if character is number?

前端 未结 22 607
误落风尘
误落风尘 2020-12-03 00:29

I need to check whether justPrices[i].substr(commapos+2,1).

The string is something like: \"blabla,120\"

In this case it would check whether \'0

相关标签:
22条回答
  • 2020-12-03 00:59

    I suggest a simple regex.

    If you're looking for just the last character in the string:

    /^.*?[0-9]$/.test("blabla,120");  // true
    /^.*?[0-9]$/.test("blabla,120a"); // false
    /^.*?[0-9]$/.test("120");         // true
    /^.*?[0-9]$/.test(120);           // true
    /^.*?[0-9]$/.test(undefined);     // false
    /^.*?[0-9]$/.test(-1);            // true
    /^.*?[0-9]$/.test("-1");          // true
    /^.*?[0-9]$/.test(false);         // false
    /^.*?[0-9]$/.test(true);          // false
    

    And the regex is even simpler if you are just checking a single char as an input:

    var char = "0";
    /^[0-9]$/.test(char);             // true
    
    0 讨论(0)
  • 2020-12-03 01:00

    Similar to one of the answers above, I used

     var sum = 0; //some value
     let num = parseInt(val); //or just Number.parseInt
     if(!isNaN(num)) {
         sum += num;
     }
    

    This blogpost sheds some more light on this check if a string is numeric in Javascript | Typescript & ES6

    0 讨论(0)
  • 2020-12-03 01:05

    You could use comparison operators to see if it is in the range of digit characters:

    var c = justPrices[i].substr(commapos+2,1);
    if (c >= '0' && c <= '9') {
        // it is a number
    } else {
        // it isn't
    }
    
    0 讨论(0)
  • 2020-12-03 01:05

    This function works for all test cases that i could find. It's also faster than:

    function isNumeric (n) {
      if (!isNaN(parseFloat(n)) && isFinite(n) && !hasLeading0s(n)) {
        return true;
      }
      var _n = +n;
      return _n === Infinity || _n === -Infinity;
    }
    

    var isIntegerTest = /^\d+$/;
    var isDigitArray = [!0, !0, !0, !0, !0, !0, !0, !0, !0, !0];
    
    function hasLeading0s(s) {
      return !(typeof s !== 'string' ||
        s.length < 2 ||
        s[0] !== '0' ||
        !isDigitArray[s[1]] ||
        isIntegerTest.test(s));
    }
    var isWhiteSpaceTest = /\s/;
    
    function fIsNaN(n) {
      return !(n <= 0) && !(n > 0);
    }
    
    function isNumber(s) {
      var t = typeof s;
      if (t === 'number') {
        return (s <= 0) || (s > 0);
      } else if (t === 'string') {
        var n = +s;
        return !(fIsNaN(n) || hasLeading0s(s) || !(n !== 0 || !(s === '' || isWhiteSpaceTest.test(s))));
      } else if (t === 'object') {
        return !(!(s instanceof Number) || fIsNaN(+s));
      }
      return false;
    }
    
    function testRunner(IsNumeric) {
      var total = 0;
      var passed = 0;
      var failedTests = [];
    
      function test(value, result) {
        total++;
        if (IsNumeric(value) === result) {
          passed++;
        } else {
          failedTests.push({
            value: value,
            expected: result
          });
        }
      }
      // true
      test(0, true);
      test(1, true);
      test(-1, true);
      test(Infinity, true);
      test('Infinity', true);
      test(-Infinity, true);
      test('-Infinity', true);
      test(1.1, true);
      test(-0.12e-34, true);
      test(8e5, true);
      test('1', true);
      test('0', true);
      test('-1', true);
      test('1.1', true);
      test('11.112', true);
      test('.1', true);
      test('.12e34', true);
      test('-.12e34', true);
      test('.12e-34', true);
      test('-.12e-34', true);
      test('8e5', true);
      test('0x89f', true);
      test('00', true);
      test('01', true);
      test('10', true);
      test('0e1', true);
      test('0e01', true);
      test('.0', true);
      test('0.', true);
      test('.0e1', true);
      test('0.e1', true);
      test('0.e00', true);
      test('0xf', true);
      test('0Xf', true);
      test(Date.now(), true);
      test(new Number(0), true);
      test(new Number(1e3), true);
      test(new Number(0.1234), true);
      test(new Number(Infinity), true);
      test(new Number(-Infinity), true);
      // false
      test('', false);
      test(' ', false);
      test(false, false);
      test('false', false);
      test(true, false);
      test('true', false);
      test('99,999', false);
      test('#abcdef', false);
      test('1.2.3', false);
      test('blah', false);
      test('\t\t', false);
      test('\n\r', false);
      test('\r', false);
      test(NaN, false);
      test('NaN', false);
      test(null, false);
      test('null', false);
      test(new Date(), false);
      test({}, false);
      test([], false);
      test(new Int8Array(), false);
      test(new Uint8Array(), false);
      test(new Uint8ClampedArray(), false);
      test(new Int16Array(), false);
      test(new Uint16Array(), false);
      test(new Int32Array(), false);
      test(new Uint32Array(), false);
      test(new BigInt64Array(), false);
      test(new BigUint64Array(), false);
      test(new Float32Array(), false);
      test(new Float64Array(), false);
      test('.e0', false);
      test('.', false);
      test('00e1', false);
      test('01e1', false);
      test('00.0', false);
      test('01.05', false);
      test('00x0', false);
      test(new Number(NaN), false);
      test(new Number('abc'), false);
      console.log('Passed ' + passed + ' of ' + total + ' tests.');
      if (failedTests.length > 0) console.log({
        failedTests: failedTests
      });
    }
    testRunner(isNumber)

    0 讨论(0)
提交回复
热议问题