我有一个要求将数字限制在3.00到100.00之间,我在下面的表达式中使用
^([3-9]|[1-9][0-9]|100)+(\.\d{1,2})?$上面的表达式的问题是,它允许100.01到100.99,这应该是restricted.It,也允许310-399,这需要限制。
我用了另一种同样的表达方式
^([3-9]|[1-9][0-9]|100.00)+(\.\d{1,2})?$但我们需要输入100.00才能传递正则表达式,而不是100。
有没有办法,我可以达到预期的结果?
发布于 2018-12-04 06:34:30
当与最终的100交替时,对\.\d?[1-9]使用负前瞻,以确保小数位(如果有的话)只有0。
由于组尾的+,您的第一个模式还可以匹配可选小数点之前的许多重复数字(比如333和101010),所以如果只想匹配3到100,最好删除+。
^(?:[3-9]|[1-9][0-9]|100(?!\.\d?[1-9]))(?:\.\d{1,2})?$
^^^^^^^^^^^^^^https://regex101.com/r/tJd3LQ/1
若要允许前导零,请在0*后面添加^
^0*(?:[3-9]|[1-9][0-9]|100(?!\.\d?[1-9]))(?:\.\d{1,2})?$
^^发布于 2018-12-04 06:33:06
你可以试试这个伙伴
^(?:100(?:\.0+)?|(?:[3-9]|[1-9][0-9])(?:\.\d{1,2})?)$解释
^ - Anchor表示字符串的开始。(?:100(?:\.0+)?) --这将匹配100,100.0,100.00(任何十进制数的零)。| -这与逻辑OR的工作原理相同.(?:[3-9]|[1-9][0-9])(?:\.\d{1,2})?) -这将匹配从3.00到99.99之间的任何数字建议
始终使用非捕获组,以防您在regex中再次使用该组。
发布于 2018-12-04 06:32:12
问题是:^([3-9]|[1-9][0-9]|100)+(\.\d{1,2})?$,它还允许第一个块中的100 (负责整组数据的块)。
在您的例子中,您需要使用类似的东西:^100\.00$|([3-9]|[1-9][0-9])+(\.\d{1,2})?$ (示例这里)。
该表达式将尝试将100.00作为一个整体进行匹配(这是您的上限,或者是3.00到99.99之间的任意数字。
https://stackoverflow.com/questions/53606890
复制相似问题