我花了半个小时才想到这个,也许有人可以快点拿出来。
我需要一个匹配一个或两个数字的正则表达式,后跟一个可选的decmial点,后跟一个或两个数字。
例如,它应该完整匹配这些字符串:
3
33
0.3
0.33
33.3
33.33
并且不匹配在decmial point之前或之后超过2位数的任何内容。
答案 0 :(得分:58)
编辑:已更改为符合其他反馈。
我理解你的意思是,如果没有小数点,那么不应该有两个以上的数字。所以这应该是它:
\d{0,2}(\.\d{1,2})?
在大多数实现中应该这样做。如果没有,您可以使用:
[0-9]?[0-9]?(\.[0-9][0-9]?)?
这应该适用于我见过的每一个实现。
答案 1 :(得分:7)
(?<![\d.])(\d{1,2}|\d{0,2}\.\d{1,2})?(?![\d.])
匹配
不匹配:
答案 2 :(得分:4)
要建立Lee的答案,你需要锚定表达式以满足小数点前不超过2个数字的要求。
如果每个数字都是单独的字符串,则可以使用string anchors:
^\d{0,2}(\.\d{1,2})?$
如果每个数字都在字符串中,您可以使用word anchors:
\b\d{0,2}(\.\d{1,2})?\b
答案 3 :(得分:3)
您提到您希望正则表达式匹配每个字符串,但您之前提到过小数点前的1-2位数?
这将匹配1-2个数字后跟一个可能的小数,然后是另外1-2个数字,但是你的例子为.33
\d{1,2}\.?\d{1,2}
这将匹配0-2位数后跟一个可能的deciaml,然后是另外1-2位数字并匹配.33的示例
\d{0,2}\.?\d{1,2}
不确定您正在寻找哪一个。
答案 4 :(得分:2)
您可以使用
让regex = new RegExp(
^(?=[0-9.]{1,${maxlength}}$)[0-9]+(?:\.[0-9]{0,${decimal_number}})?$
);
您可以在其中确定最大长度以及要控制该值的小数点为止
使用ES6字符串插值法包装变量$ {maxlength}和$ {decimal_number}。
答案 5 :(得分:1)
^(\d{0,2}\\.)?\d{1,2}$
\d{1,2}$
匹配1-2位数字后面没有任何内容(3
,33
等),(\d{0,2}\.)?
可选匹配0-2位数字后跟一段时间(3.
,44.
,.
等)。把它们放在一起你就得到了你的正则表达式。
答案 6 :(得分:0)
^\d{0,2}\.?\d{1,2}$
答案 7 :(得分:0)
之前的答案大多是正确的,但它也会匹配空字符串。以下将解决这个问题。
^([0-9]?[0-9](\.[0-9][0-9]?)?)|([0-9]?[0-9]?(\.[0-9][0-9]?))$
答案 8 :(得分:0)
试试这个
\d{1,2}\.?(\.\d{1,2})?
答案 9 :(得分:0)
以下是两位数和两位小数的非常好的正则表达式。
[RegularExpression(@"\d{0,2}(\.\d{1,2})?", ErrorMessage = "{0} must be a Decimal Number.")]
答案 10 :(得分:-1)
\d{1,}(\.\d{1,2})|\d{0,9}
中测试
匹配带小数点后两位或仅一个小数的数字,或不带小数点后的数字。
您可以通过更改数字2来更改所需的数字或小数位