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) 不幸的是,这对我不起作用。 有人能帮我找到想要的解决方案吗 试试这样的东西: 试着做这样的事情: /
- 使用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/