The*_*der 1 javascript regex string-comparison string-matching typescript
以下是我要申请的验证:
现在我尝试了各种组合,但仍然没有成功在 Typescript 中创建这样的条件。这是我尝试过的:
不幸的是,这对我不起作用。任何人都可以帮助我获得所需的解决方案吗?
在 TypeScript 中,使用以下可以接受任何值的函数:
const isFixed = (o: any) => {
const s = String(o)
return !isNaN(+s) && isFinite(+s) && (typeof o === 'number' || !/e/i.test(s))
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您只检查字符串:
const isFixedString = (s: string) => !isNaN(+s) && isFinite(+s) && !/e/i.test(s)
Run Code Online (Sandbox Code Playgroud)
请注意,String()第一个函数中的显式转换是为了避免调用值的toString()orvalueOf()或[Symbol.toPrimitive]()多次,并冒险检查自动更新类型(如{ n: 0, valueOf: () => n++ }.
+在两个定义中使用一元运算符的强制转换专门用于参数类型与 TypeScript for isNaN()and 中的全局定义兼容,尽管 JavaScript 可以处理任何类型,但出于某种原因isFinite()需要number参数。否则,可以在不更改结果的情况下删除这些强制转换。
仅使用!isNaN(mystring),您将检查是否将字符串转换为Number()会导致NaN:
const isFixed = (o: any) => {
const s = String(o)
return !isNaN(+s) && isFinite(+s) && (typeof o === 'number' || !/e/i.test(s))
}
Run Code Online (Sandbox Code Playgroud)
需要注意的是,这种方法也接受科学记数法和Infinity,需要分别处理isFinite(mystring) && !/e/i.test(mystring):
const isFixedString = (s: string) => !isNaN(+s) && isFinite(+s) && !/e/i.test(s)
Run Code Online (Sandbox Code Playgroud)