简单正则expression式,精度为2的小数
什么是精度为2的小数的正则expression式?
有效的例子 :
123.12 2 56754 92929292929292.12 0.21 3.1
无效的例子:
12.1232 2.23332 e666.76
小数点可以是可选的,也可以包含整数。
有效的正则expression式令牌因实现而异。 我所知道的最通用的forms是:
[0-9]+(\.[0-9][0-9]?)?
最紧凑的:
\d+(\.\d{1,2})?
两者都假设你必须在小数点前后至less有一位数字。
为了要求整个string是这种forms的数字,将expression式包装在起始和结束标签中,例如(以Perl的forms):
^\d+(\.\d{1,2})?$
ADDED:包装()中的小数部分? 使其成为可选。 请注意,这不包括“12.”等forms。 包括那更像^\d+\.?\d{0,2}$
。
^[0-9]+(\.[0-9]{1,2})?$
由于正则expression式是可怕的阅读,更不用说理解,这里是冗长的等值:
^ # Start of string. [0-9]+ # Must have one or more numbers. ( # Begin optional group. \. # The decimal point, . must be escaped, # or it is treated as "any character". [0-9]{1,2} # One or two numbers. )? # End group, signify it's optional with ? $ # End of string.
在大多数正则expression式实现(包括PCRE ,最常见的)中,您可以用\d
replace[0-9]
。 我把它[0-9]
因为我认为它更容易阅读。
另外,下面是我用来检查它的简单的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
要包括一个可选的减号和禁止数字如015
(可以被误认为八进制数字)写:
-?(0|([1-9]\d*))(\.\d+)?
对于没有千位分隔符的数字,我喜欢这个简单而紧凑的正则expression式:
\d+(\.\d{2})?|\.\d{2}
或者,不限于2的精度:
\d+(\.\d*)?|\.\d+
后者匹配
1
100
100。
100.74
100.7
0.7
0.7
0.72
它不匹配空string(如\ d *。?\ d * would)
^[0-9]+(\.([0-9]{1,2})?)?$
会让事情像12.
接受。 这不是普遍接受的,但如果你需要“灵活”,那是一条路。 当然[0-9]
可以用\d
replace,但是我想这样可以更加可读。
尝试这个
(\\+|-)?([0-9]+(\\.[0-9]+))
它也会允许正面和负面的迹象。
我用这个最多两位小数:
(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$)
0.25
0.25
10.25
+0.25
不通过:
-.25
01.25
1。
1.256
preg_match("/^-?\d+[\.]?\d\d$/", $sum)
一般来说,即无限制小数位:
^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$
。
你不需要考虑e666.76
的e
吗?
同
(e|0-9)\d*\d.\d{1,2)
我尝试了一个与我的项目。 这允许数字+ | – 标志以及。
/^(+|-)?[0-9]{0,}((.){1}[0-9]{1,}){0,1}$/
也加上我的答案,有人可能会发现它有用或可能是我的正确的。
function getInteger(int){ var regx = /^[-+]?[\d.]+$/g; return regx.test(int); } alert(getInteger('-11.11'));
这与我工作:
(-?[0-9]+(\.[0-9]+)?)
第1组是你的浮点数, 第2组只是分数。
Chrome 56不接受这种模式(Chrome 56正在使用11.11。一个附加的),并且使用types作为文本进度。
function DecimalNumberValidation() { var amounttext = ; if (!(/^[-+]?\d*\.?\d*$/.test(document.getElementById('txtRemittanceNumber').value))){ alert('Please enter only numbers into amount textbox.') } else { alert('Right Number'); } }
函数将validation任何十进制数的天气数字是否有小数位,它会说“正确的数字”其他明智的“请只input数量文本框”。 警报消息将会出现。
谢谢… :)