Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Typescript中检查字符串是否为数字/浮点?_Javascript_Regex_Typescript_String Comparison_String Matching - Fatal编程技术网

Javascript 如何在Typescript中检查字符串是否为数字/浮点?

Javascript 如何在Typescript中检查字符串是否为数字/浮点?,javascript,regex,typescript,string-comparison,string-matching,Javascript,Regex,Typescript,String Comparison,String Matching,以下是我要应用的验证: 字符串应包含0到9之间的任何字符 它不应该包含任何字母字符 它最多可以包含一个“-”(减号运算符),表示负数,如“-12” 它最多可以包含一个“.”,以涵盖浮点数(如“12.2”)的情况 现在我已经尝试了各种组合,但仍然无法在Typescript中创建这样的条件。 以下是我尝试过的: 使用regex/^[0-9.{0,1}-{0,1}]/.test(mystring) 不幸的是,这对我不起作用。 有人能帮我找到想要的解决方案吗 试试这样的东西: 试着做这样的事情: /

以下是我要应用的验证:

  • 字符串应包含0到9之间的任何字符
  • 它不应该包含任何字母字符
  • 它最多可以包含一个“-”(减号运算符),表示负数,如“-12”
  • 它最多可以包含一个“.”,以涵盖浮点数(如“12.2”)的情况
  • 现在我已经尝试了各种组合,但仍然无法在Typescript中创建这样的条件。 以下是我尝试过的:

    • 使用regex/^[0-9.{0,1}-{0,1}]/.test(mystring)
    不幸的是,这对我不起作用。 有人能帮我找到想要的解决方案吗

    试试这样的东西:

    试着做这样的事情:


    /^-?([1-9]\d*)| 0)(\.\d+)$/

    在TypeScript中,使用以下可接受任何值的函数:

    const isFixed = (o: any) => {
      const s = String(o)
      return !isNaN(+s) && isFinite(+s) && (typeof o === 'number' || !/e/i.test(s))
    }
    
    或者,如果您只检查字符串:

    const isFixedString = (s: string) => !isNaN(+s) && isFinite(+s) && !/e/i.test(s)
    
    请注意,第一个函数中显式的
    String()
    强制转换是为了避免多次调用值的
    toString()
    valueOf()
    [Symbol.toPrimitive]()
    ,并避免检查自动更新类型的冲突值,如
    {n:0,valueOf:=>n++}

    在这两种定义中使用一元
    +
    运算符的强制转换专门用于参数类型,以便与
    isNaN()
    isFinite()
    的TypeScript中的全局定义兼容,这两种类型出于某种原因需要一个
    number
    参数,即使JavaScript可以处理任何类型。否则,可以删除这些强制转换而不更改结果

    解释 只需使用
    !isNaN(mystring)
    ,您将检查使用
    Number()
    强制转换字符串是否会导致
    NaN

    const isInvalid = isNaN("-12.3");
    
    console.log(isInvalid ? 'Invalid' : 'Valid');
    
    设arr=['5'、'-5'、'.5'、'5'、'0'、'5e0'、'5e0'、'Infinity'、'-Infinity'、'5a'、'n'、'-5'];
    
    arr.forEach(str=>console.log(str,!isNaN(str))
    在TypeScript中,使用以下可以接受任何值的函数:

    const isFixed = (o: any) => {
      const s = String(o)
      return !isNaN(+s) && isFinite(+s) && (typeof o === 'number' || !/e/i.test(s))
    }
    
    或者,如果您只检查字符串:

    const isFixedString = (s: string) => !isNaN(+s) && isFinite(+s) && !/e/i.test(s)
    
    请注意,第一个函数中显式的
    String()
    强制转换是为了避免多次调用值的
    toString()
    valueOf()
    [Symbol.toPrimitive]()
    ,并避免检查自动更新类型的冲突值,如
    {n:0,valueOf:=>n++}

    在这两种定义中使用一元
    +
    运算符的强制转换专门用于参数类型,以便与
    isNaN()
    isFinite()
    的TypeScript中的全局定义兼容,这两种类型出于某种原因需要一个
    number
    参数,即使JavaScript可以处理任何类型。否则,可以删除这些强制转换而不更改结果

    解释 只需使用
    !isNaN(mystring)
    ,您将检查使用
    Number()
    强制转换字符串是否会导致
    NaN

    const isInvalid = isNaN("-12.3");
    
    console.log(isInvalid ? 'Invalid' : 'Valid');
    
    设arr=['5'、'-5'、'.5'、'5'、'0'、'5e0'、'5e0'、'Infinity'、'-Infinity'、'5a'、'n'、'-5'];
    
    arr.forEach(str=>console.log(str,!isNaN(str))
    正如上面评论中所解释的,parseFloat将不能满足您的所有要求。我不喜欢用Reg-Ex方法来处理这类事情

    最简单的方法是使用一元
    +

    const stringTransformedToNumber = +"-12.3";
    
    const isInvalid = isNaN(stringTransformedToNumber);
    
    console.log(isInvalid ? 'Invalid' : 'Valid');
    
    更好的方法是只使用
    isNaN

    const isInvalid = isNaN("-12.3");
    
    console.log(isInvalid ? 'Invalid' : 'Valid');
    

    如上所述,parseFloat不能满足您的所有需求。我不喜欢用Reg-Ex方法来处理这类事情

    最简单的方法是使用一元
    +

    const stringTransformedToNumber = +"-12.3";
    
    const isInvalid = isNaN(stringTransformedToNumber);
    
    console.log(isInvalid ? 'Invalid' : 'Valid');
    
    更好的方法是只使用
    isNaN

    const isInvalid = isNaN("-12.3");
    
    console.log(isInvalid ? 'Invalid' : 'Valid');
    


    Typescript不是一种运行时语言。我是说Typescript本身不是一种编程语言。相反,它(有效地)是对Javascript的一种增强,提供了Javascript数据的编译时类型。所以我不明白Typescript本身与这个问题有什么关系。您有一个Javascript问题,您应该能够使用
    控制台
    进行调试。TypeScript不是一种编程语言吗?现在我很难过。@jcalz我担心我会因为那句话而受到指责。我不知道我的意思是什么:)有没有遗失的
    Number(val)
    支票@AdityaParab parseFloat将接受
    12.3xyz
    。Typescript不是运行时语言。我是说Typescript本身不是编程语言。相反,它(有效地)是对Javascript的一种增强,提供了Javascript数据的编译时类型。所以我不明白Typescript本身与这个问题有什么关系。您有一个Javascript问题,您应该能够使用
    控制台
    进行调试。TypeScript不是一种编程语言吗?现在我很难过。@jcalz我担心我会因为那句话而受到指责。我不知道我的意思是什么:)有没有遗失的
    Number(val)
    支票@AdityaParab parseFloat将接受
    12.3xyz
    5.
    .5
    应为有效数字,并且它们都将无法通过此检查。只需
    const isNumber=n=>就更容易了!isNaN(n)
    5.
    .5
    应该是有效的数字,并且它们都将无法通过此检查。只需
    const isNumber=n=>就更容易了!isNaN(n)
    你甚至不需要投下它,看看我的答案。是的。。。您的答案已在我的帖子中发布。:)很好。你甚至不需要投,看看我的答案。是的。。。您的答案已在我的帖子中发布。:)好的,哦!凉的我不知道这件事。。科学符号+1@AdityaParab
    /e/i
    只是一个RegExp文本,它匹配包含
    e
    e
    的字符串。。谢谢,噢!凉的我不知道这个
    /e/