Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.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 JS Regex表示数字包含一个'';但是没有_Javascript_Regex - Fatal编程技术网

Javascript JS Regex表示数字包含一个'';但是没有

Javascript JS Regex表示数字包含一个'';但是没有,javascript,regex,Javascript,Regex,在这个页面上,我有一个名为TYPE的函数,它的语法链接在页面上,用于十进制检测函数的正则表达式位于下面的代码块中* 但是,一旦我输入了太多的数字,该类型会显示单元格包含一个小数点,尽管没有小数点。这是一个自动功能,添加了一个。当一个数字超过某个限制时 示例案例:312312312312312312312 输出:十进制 编辑: 函数类型(){ 常量正则表达式=/\[0-9]/; if(参数[0]=“true”| |参数[0]=“false”) 返回“布尔”; if(isNaN(参数[0])) 返

在这个页面上,我有一个名为TYPE的函数,它的语法链接在页面上,用于十进制检测函数的正则表达式位于下面的代码块中*

但是,一旦我输入了太多的数字,该类型会显示单元格包含一个小数点,尽管没有小数点。这是一个自动功能,添加了一个。当一个数字超过某个限制时

示例案例:312312312312312312312 输出:十进制 编辑:

函数类型(){
常量正则表达式=/\[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 */