正则表达式匹配从0.00到50.00的数字

时间:2019-05-10 16:40:42

标签: regex regex-negation regex-lookarounds regex-group regex-greedy

如何获取允许以下内容的正则表达式:

0.00至50.00,并且也用逗号作为小数点分隔符,因此 0,00至50,00

我已经达到了[[0-5] {1})?([0-9] {1})([,] [0-9] {1,2})? 但是在某些情况下它会失败。我已经在线搜索,但是找不到正确的答案。

已添加: 需求的微小变化。实际上,它应该是0.01到50.00,以及0.01到50,00。 (但是,根据下面的答案,我认为我设法适应了正则表达式字符串,因此也可以将其匹配)

3 个答案:

答案 0 :(得分:2)

有一个regex for range generator here。生成并使用它,想出了这个

^(?:[1-4]?\d[.,]\d\d?|50[.,]00?)$

添加了非捕获组,几乎没有修改,并且^开始/ $结束锚点。 See demo at regex101
对于可选的小数部分,如何处理:^(?:[1-4]?\d(?:[.,]\d\d?)?|50(?:[.,]00?)?)$

答案 1 :(得分:2)

此正则表达式应涵盖几乎所有与0.0050.00匹配的数字的情况,

^(?=.)(?:(?:(?:0|[1-4]?\d)?(?:[,.]\d{1,2})?)|50(?:[.,]00?)?)$

说明:

  • ^-字符串的开头
  • (?=.)-积极向前看,避免匹配空字符串
  • (?:-第一个非分组模式的开始
    • (?:-第二个非分组模式的开始
    • (?:0|[1-4]?\d)?-该数字匹配从049的整数,并且该整数可能不存在
    • (?:[,.]\d{1,2})?-匹配逗号或点后跟一位或两位数的数字,并且该十进制部分可能不存在
    • )-关闭第二个非分组模式
  • |-数字50大小写的替代形式
  • 50(?:[.,]00?)?)-匹配50,后跟逗号或点号,然后匹配000,其中小数部分是可选的
  • )-关闭第一个非分组模式
  • $-字符串结尾

Regex Demo

编辑: 要舍弃零值数字,您只需在当前正则表达式中添加负号(?!0*[.,]?0*$)并使用此正则表达式,

^(?=.)(?!0*[.,]?0*$)(?:(?:(?:0|[1-4]?\d)?(?:[,.]\d{1,2})?)|50(?:[.,]00?)?)$

Regex Demo rejecting zero valued numbers

答案 2 :(得分:0)

这对你有用吗?

(50([.,]0{1,2})?)|([0-4]?[0-9]([.,][0-9]{1,2})?)