我需要一个十进制/浮点数的正则表达式,如 12 12.2 1236.32 123.333 和 +12.00 或 -12.00 或 ...123.123... 用于在 javascript 和 jQuery 中使用。谢谢你。
用于查找十进制/浮点数的正则表达式?
正确的表达方式应该如下:
[+-]?([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
}
这是一篇旧帖子,但它是“浮点正则表达式”或类似内容的最高搜索结果,并没有完全回答_我的_问题。既然我已经解决了,我将分享我的结果,这样下一个遇到这个线程的人就不必自己解决了。
到目前为止,所有答案都接受0
在小数点左侧有两个(或更多)数字的数字前导(例如,0123
而不是仅仅123
)这不是真正有效的,在某些情况下用于指示数字是八进制的(base-8) 而不是常规的十进制 (base-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/
哪个会找到-3.14
in"negative pi is approximately -3.14."
或 in"(-3.14)"
等。
编号组具有与上述相同的含义(除了当没有前导符号时$2
现在是空字符串 ( ""
) 而不是null
)。
但请注意,它还会尝试提取它可以找到的任何数字。例如,它将127.0
从127.0.0.1
.
如果您想要比这更复杂的东西,那么我认为您可能需要查看词法分析而不是正则表达式。我猜可以创建一个基于前瞻的表达式,它可以识别"Pi is 3.14."
包含浮点数但Home is 127.0.0.1.
不包含浮点数 的表达式,但充其量它会很复杂。如果您的模式以非平凡的方式依赖于它后面的字符,那么您就开始在正则表达式的最佳位置之外冒险。
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