Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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 查找十进制/浮点数的正则表达式?_Javascript_Regex_Floating Point_Decimal - Fatal编程技术网

Javascript 查找十进制/浮点数的正则表达式?

Javascript 查找十进制/浮点数的正则表达式?,javascript,regex,floating-point,decimal,Javascript,Regex,Floating Point,Decimal,我需要一个十进制/浮点数的正则表达式,如12 12.2 1236.32 123.333和+12.00或-12.00或…123.123。。。用于javascript和jQuery中。 谢谢。可选择在开始处匹配+或-,后跟一个或多个十进制数字,可选择后跟一个小数点,并在字符串末尾匹配一个或多个十进制数字: /^[+-]?\d+(\.\d+)?$/ 正确的表达式应如下所示: [+-]?([0-9]*[.])?[0-9]+ 这适用于: +1 +1. +.1 +0.1 1 1. .1 0.1 以下是

我需要一个十进制/浮点数的正则表达式,如12 12.2 1236.32 123.333和+12.00或-12.00或…123.123。。。用于javascript和jQuery中。
谢谢。

可选择在开始处匹配+或-,后跟一个或多个十进制数字,可选择后跟一个小数点,并在字符串末尾匹配一个或多个十进制数字:

/^[+-]?\d+(\.\d+)?$/

正确的表达式应如下所示:

[+-]?([0-9]*[.])?[0-9]+
这适用于:

+1
+1.
+.1
+0.1
1
1.
.1
0.1
以下是Python示例:

import re
#print if found
print(bool(re.search(r'[+-]?([0-9]*[.])?[0-9]+', '1.0')))
#print result
print(re.search(r'[+-]?([0-9]*[.])?[0-9]+', '1.0').group(0))
输出:

True
1.0
如果您使用的是mac,则可以在命令行上测试:

python -c "import re; print(bool(re.search(r'[+-]?([0-9]*[.])?[0-9]+', '1.0')))"

python -c "import re; print(re.search(r'[+-]?([0-9]*[.])?[0-9]+', '1.0').group(0))"

您可以使用isNaN检查文本验证,也可以只检查一个小数点验证

var val = $('#textbox').val();
var floatValues =  /[+-]?([0-9]*[.])?[0-9]+/;
 if (val.match(floatValues) && !isNaN(val)) {
  // your function
}

Paulpro和lbsweek的回答让我想到:

re=/^[+-]?(?:\d*\.)?\d+$/;
>> /^[+-]?(?:\d*\.)?\d+$/

re.exec("1")
>> Array [ "1" ]

re.exec("1.5")
>> Array [ "1.5" ]

re.exec("-1")
>> Array [ "-1" ]

re.exec("-1.5")
>> Array [ "-1.5" ]

re.exec(".5")
>> Array [ ".5" ]

re.exec("")
>> null

re.exec("qsdq")
>> null
这是一篇老文章,但它是“浮点正则表达式”或类似内容的顶级搜索结果,并没有完全回答我的问题。既然我已经解决了这个问题,我将分享我的结果,这样下一个遇到这个问题的人就不必自己解决了

到目前为止,所有答案都接受小数点左侧有两个(或更多)数字的数字的前导
0
(例如
0123
,而不仅仅是
123
),这并不是真正有效的,在某些上下文中用于指示数字是八进制(基数-8)格式,而不是常规的十进制(基数-10)格式

此外,这些表达式接受不带前导零的十进制(
.14
而不是
0.14
),或不带尾随小数部分(
3.
而不是
3.0
)。这在某些编程上下文(包括JavaScript)中是有效的,但我不想允许它们(因为就我的目的而言,这些更可能是错误,而不是故意的)

忽略像
1.234E7
这样的“科学符号”,这里有一个表达式符合我的标准:

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

或者,如果您确实希望接受前导的
+
,则:

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

我相信正则表达式将对典型的整数或十进制浮点数执行严格的测试

匹配时:

  • $1
    包含匹配的完整数字
  • $2
    包含(可能为空)前导符号(+/-)
  • $3
    包含小数点左侧的值
  • $5
    包含小数点右侧的值,包括前导的
通过“严格”我的意思是数字必须是您正在测试的字符串中唯一的内容

如果要仅从包含其他内容的字符串中提取浮点值,请使用以下表达式:

/(\b\+-)(0([1-9][0-9]*)(\.[0-9]+)?)\b/

“负pi约为-3.14。”
“(-3.14)”
等中可以找到
-3.14

编号的组与上面的含义相同(除了当没有前导符号时,
$2
现在是空字符串(
),而不是
null

但请注意,它也会试图提取它能找到的任何数字。例如,它将从
127.0.0.1
中提取
127.0

如果你想要比这更复杂的东西,那么我想你可能想看看词法分析,而不是正则表达式。我猜可以创建一个基于前瞻性的表达式,该表达式可以识别出
“Pi是3.14。”
包含一个浮点数,但
Home是127.0.0.1。
没有,但充其量也会很复杂。如果您的模式以非平凡的方式依赖于它后面的字符,那么您将开始尝试超出正则表达式的最佳范围。

对于任何新用户:

我为E科学符号做了一个RegExp(没有空格)

如果您愿意使用,可以将RegExp中的所有
[0-9]
替换为
\d

并可能在RegExp的末尾添加Unicode标志
u

要更好地理解模式,请参见。
对于制作RegExp,我可以建议


编辑:找到了另一个用于以彩色查看RegExp的站点:。

是否应该像
[+-]
那样转义
[+\-]
?@jfriend00不,不需要转义。它不可能是一个范围,因为它是类中的最后一个字符,所以它是一个文字负号。只需在控制台中尝试以下操作:
/^[+-]?\d+(\.\d+)$/.test('-1')
@jfriend00如果减号是字符类中的第一个或最后一个字符,它会按字面意思指定减号。所以在本例中,
[+-]
[-+]
[+\-]
[\-+]
都是等效的。@James它适用于
0.99
。如果你想让它以十进制开始,把第一个
\d+
改为
\d*
@AralRoca,从OP上看没有迹象表明他们想让它与
e
一起工作。这是一个更好的答案,因为我可以放9.5毫米或9.5英寸等。感谢这+1似乎不包括这些情况:23..8789或4587.387.987。这帮助了我:
const floatR = /^([+-]?(?:[0-9]+(?:\.[0-9]+)?|\.[0-9]+)(?:[eE][+-]?[0-9]+)?)$/;
let str = "-2.3E23";
let m = floatR.exec(str);
parseFloat(m[1]); //=> -2.3e+23