Javascript JS Regex表示数字包含一个'';但是没有
在这个页面上,我有一个名为TYPE的函数,它的语法链接在页面上,用于十进制检测函数的正则表达式位于下面的代码块中* 但是,一旦我输入了太多的数字,该类型会显示单元格包含一个小数点,尽管没有小数点。这是一个自动功能,添加了一个。当一个数字超过某个限制时 示例案例:312312312312312312312 输出:十进制 编辑:Javascript JS Regex表示数字包含一个'';但是没有,javascript,regex,Javascript,Regex,在这个页面上,我有一个名为TYPE的函数,它的语法链接在页面上,用于十进制检测函数的正则表达式位于下面的代码块中* 但是,一旦我输入了太多的数字,该类型会显示单元格包含一个小数点,尽管没有小数点。这是一个自动功能,添加了一个。当一个数字超过某个限制时 示例案例:312312312312312312312 输出:十进制 编辑: 函数类型(){ 常量正则表达式=/\[0-9]/; if(参数[0]=“true”| |参数[0]=“false”) 返回“布尔”; if(isNaN(参数[0])) 返
函数类型(){
常量正则表达式=/\[0-9]/;
if(参数[0]=“true”| |参数[0]=“false”)
返回“布尔”;
if(isNaN(参数[0]))
返回“字符串”;
else if(regex.test(参数[0]))
返回“十进制”;
其他的
返回“整数”;
}
您有一个大于对象可以处理的数字的整数(请参见:),因此当它转换为正则表达式的字符串时,它将成为一个指数值
尝试console.log(312312312312312)
您将获得3.123e+30
或
您还可以使用Number.isSafeInteger(312312312312)测试您的值
,返回false
解决方法是使用Number.isInteger()代码>作为您的测试,而不是正则表达式。对于您的大数字,它会正确返回true
请参阅:Javascript只能安全地存储高达9007199254740991的整数。除此之外,javascript可能会将数字转换为幂表示法(即,5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
var n = 3123123123123123123122312312312;
console.log(n);
/* Output: 3.123123123123123e+30 */
您可以使用Number.isSafeInteger()
测试数字是否在安全范围内,然后在这种情况下对其应用原始代码。如果不是,您可以执行不同的测试(例如针对/\d\.\d+e\+\d++
)来查看包含的十进制数是否由指数表示法引起
还要注意,指数表示法中的数字将使用number.isInteger()
测试true
,即使它是一个浮点数,因为该信息将丢失
var x_int = 3123123123123123123122312312312;
var x_flt = 3123123123123123123122312312312.333333333;
console.log( x_int === x_flt);
/* Output: true */
console.log(Number.isInteger(x_flt));
/* Output: true */
表示正则表达式中的“任意字符”。你的意思是\.
?你需要像@ggorlen所说的那样避开圆点。这能回答你的问题吗?请在您的问题中添加代码示例,而不仅仅是指向包含您正在谈论的javascript函数的页面的链接。当你要求这里的很多人做很多工作只是为了看你的代码时,他们可能会试图帮助你。这篇文章不知何故删除了我的正则表达式中的反斜杠:/实际的正则表达式是:/\.[0-9]/所以是的,我有\。但似乎已经有人回答了,我会编辑主要帖子,谢谢你的快速回复,虽然这确实是我想要的,谢谢你的回答,克里斯,不客气。请点击“接受”或对您认为对其他人有用的任何答案进行投票。感谢您提供的Number.isInteger()
注意,这会很有帮助,谢谢Lucasy您的想法是正确的,但是312312312312312312312312312312
实际上在Number.MAX\u值的范围内(3.123E+30
小于1.7976931348623157e+308
)。所有大于该值的数字都将转换为值无穷大。是的。我刚刚插入了错误的链接。我将其更改为指向最大安全整数。
var x_int = 3123123123123123123122312312312;
var x_flt = 3123123123123123123122312312312.333333333;
console.log( x_int === x_flt);
/* Output: true */
console.log(Number.isInteger(x_flt));
/* Output: true */