有效示例:
123.12
2
56754
92929292929292.12
0.21
3.1
无效的示例:
12.1232
2.23332
e666.76
小数点可以是可选的,也可以包含整数。
#1 楼
有效的正则表达式令牌因实现而异。通用形式为:[0-9]+(\.[0-9][0-9]?)?
更紧凑:
\d+(\.\d{1,2})?
两者都假定两者至少具有一个
要要求整个字符串是这种格式的数字,请将表达式包装在开始和结束标记中,例如(以Perl格式):
^\d+(\.\d{1,2})?$
要匹配不带小数点前的前导数字(
.12
)的数字和带尾部的整数(12.
),同时排除单个句点(.
)的输入,请尝试以下方法:^(\d+(\.\d{0,2})?|\.?\d{1,2})$
已添加
将
()?
的小数部分包装为可选。请注意,这不包括诸如12.
之类的形式,包括与^\d+\.?\d{0,2}$
之类的形式。已添加
使用
^\d{1,6}(\.\d{1,2})?$
可以停止重复并限制整个十进制值的一部分。评论
从数学上讲,我认为精度2的数字应始终具有两个小数,即使最后一个为零。这是基于我对大量数字的经验,因此可能是错误的,但是您实际上并不知道1.7是1.70还是1.70至1.74之间的任何数字。
– paxdiablo
08年11月21日在9:17
谢谢!正是我所需要的:) +1
– alex
09年8月27日在0:09
这匹配0001.00:/
– redben
2012年1月21日15:40
添加 '-?'在此^ \ d +(\。\ d {1,2})?$ ===> ^-?\ d +(\。\ d {1,2})?$中用于支持-ve
– Murali Murugesan
13年2月6日在10:00
@BimalDas,您可以通过在表达式前面加上-?来支持负数。 ,例如-?\ d +(\。\ d {1,2})?。我没有添加负数或以小数点开头,因为它们在OP的问题中没有,尽管它们对于更通用的数字格式肯定有效。这里的注释线程提供了几种处理“ .21”的方法。
– DocMax
17年7月21日在16:06
#2 楼
^[0-9]+(\.[0-9]{1,2})?$
由于正则表达式很容易阅读,因此了解得很少,所以这是冗长的等效项:
^ # Start of string
[0-9]+ # Require one or more numbers
( # Begin optional group
\. # Point must be escaped or it is treated as "any character"
[0-9]{1,2} # One or two numbers
)? # End group--signify that it's optional with "?"
$ # End of string
可以将
[0-9]
替换为在大多数正则表达式实现中(包括最常见的PCRE)。我将其保留为\d
,因为我认为它更易于阅读。此外,这是我用来检查它的简单Python脚本:
import re
deci_num_checker = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""")
valid = ["123.12", "2", "56754", "92929292929292.12", "0.21", "3.1"]
invalid = ["12.1232", "2.23332", "e666.76"]
assert len([deci_num_checker.match(x) != None for x in valid]) == len(valid)
assert [deci_num_checker.match(x) == None for x in invalid].count(False) == 0
评论
我希望小数点前最多3位数字,这样就没有运气^([0-9] {0,3})+(\。[0-9] {1,2})?$
–腊肠
13-10-15在6:17
@Raghurocks在第一个结束括号^([0-9] {0,3})(\。[0-9] {1,2})?$之后删除+。
– dbr
13-10-17在12:55
对于Java用户:小数点不能转义。
–user1382306
2014年1月26日22:10
@Gracchus确定吗?它可能应该是\\。代替 \。因为。将看起来像它的作品,但匹配任何字符(不仅是小数位)。例如,如果您不逃避1z23和1.23可能都被视为有效
– dbr
2014年1月27日在2:27
@dbr也许就是这样。 Java只是抱怨转义不当。删除“修复”(关闭),大声笑。我还没有机会对其进行全面测试。
–user1382306
2014年1月27日,下午2:31
#3 楼
要包括可选的减号并禁止使用015
之类的数字(可能会误认为八进制数字),请输入:-?(0|([1-9]\d*))(\.\d+)?
评论
这允许我在小数点前使用alpha。允许X.25
–孟加拉虎
15年3月25日在18:05
这不会将小数位数限制为2。
–达伍德·伊本·卡里姆(Dawood ibn Kareem)
16-10-17在19:32
#4 楼
对于没有千位分隔符的数字,我喜欢这种简单,紧凑的正则表达式:\d+(\.\d{2})?|\.\d{2}
,或者,不限于精度2:
\d+(\.\d*)?|\.\d+
后一种匹配项
1
100
100.
100.74
100.7
0.7
.7
.72
它不匹配空字符串(如\ d *。?\ d *会匹配)
#5 楼
我最多使用一个小数点后两位:(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$)
通过:
.25
10.25
+0.25
不通过:
-.25
01.25
1.
1.256
评论
这还将传递一个空白值。
–孟加拉虎
2015年2月25日在23:07
#6 楼
^[0-9]+(\.([0-9]{1,2})?)?$
会接受
12.
之类的东西。这不是普遍接受的,但是如果您需要“灵活”,那是一种方法。当然,可以将[0-9]
替换为\d
,但是我想这种方式更具可读性。#7 楼
试试这个 (\+|-)?([0-9]+(\.[0-9]+))
它也将允许正号和负号。
#8 楼
主要答案是错误的,因为它可以验证5.
或5,
输入此代码可以处理它(但在我的示例中,禁止使用负数):
/^[0-9]+([.,][0-9]{1,2})?$/;
结果如下:
true =>“ 0” / true =>“ 0.00” / true =>“ 0.0” / true =>“ 0,00” / true => “ 0,0” / true =>“ 1,2”
true =>“ 1.1” / true =>“ 1” / true =>“ 100” true =>“ 100.00” / true =>“ 100.0 “ / true =>
” 1.11“ / true =>” 1,11“ / false =>” -5“ / false =>” -0.00“ / true =>” 101“ / false =>
“ 0.00.0” / true =>“ 0.000” / true =>“ 000.25” / false =>“ .25” / true =>“ 100.01” /
true =>“ 100.2” / true = >“ 00” / false =>“ 5”。 / false =>“ 6,” / true =>“ 82” / true =>
“ 81,3” / true =>“ 7” / true =>“ 7.654”
#9 楼
preg_match("/^-?\d+[\.]?\d\d$/", $sum)
#10 楼
通常,即无限制的小数位数:^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$
。评论
例如,与22.00不匹配
– Fusseldieb
11月6日13:48
#11 楼
您是否需要考虑e
中的e666.76
?使用
(e|0-9)\d*\d.\d{1,2)
评论
不,那将超出项目范围!谢谢,但是,它很方便:)
–user39221
08年11月21日在7:38
#12 楼
也添加我的答案,可能有人会觉得它有用或对我也是正确的。function getInteger(int){
var regx = /^[-+]?[\d.]+$/g;
return regx.test(int);
}
alert(getInteger('-11.11'));
#13 楼
这对我有用:(-?[0-9]+(\.[0-9]+)?)
组1是您的浮点数,组2仅是小数。
#14 楼
我尝试了一个项目。这也允许带有
+ | -
符号的数字。/^(\+|-)?[0-9]{0,}((\.){1}[0-9]{1,}){0,1}$/
#15 楼
Chrome 56不接受带有类型编号的这种模式(Chrome 56正在接受11.11。附加的。),请使用type作为文本作为进度。#16 楼
这将允许带幂运算的小数和最多2位数字,^[+-]?\d+(\.\d{2}([eE](-[1-9]([0-9]*)?|[+]?\d+))?)?$
演示
评论
不匹配整数也不匹配1.2e-10
–多多
'18 Sep 4'在10:10
是的,谢谢您的纠正。我以为只有十进制数字
– Nambi_0915
18/09/4在10:19
([0-9] +)?最好写为\ d *。现在,它与10e3不匹配。 OP希望匹配最多2位数字。
–多多
'18 Sep 4'在10:25
#17 楼
function DecimalNumberValidation() {
var amounttext = ;
if (!(/^[-+]?\d*\.?\d*$/.test(document.getElementById('txtRemittanceNumber').value))){
alert('Please enter only numbers into amount textbox.')
}
else
{
alert('Right Number');
}
}
函数将验证任何十进制数字天气数字是否具有小数位,否则将显示“正确数字”,否则将显示“请仅在数字文本框中输入数字”。警报消息将会出现。
谢谢... :)
评论
相关:有关带千位分隔符的小数,请参见stackoverflow.com/questions/16148034/…最佳答案在这里:stackoverflow.com/a/39399503/715269