如何获取允许以下内容的正则表达式:
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。 (但是,根据下面的答案,我认为我设法适应了正则表达式字符串,因此也可以将其匹配)
答案 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.00
到50.00
匹配的数字的情况,
^(?=.)(?:(?:(?:0|[1-4]?\d)?(?:[,.]\d{1,2})?)|50(?:[.,]00?)?)$
说明:
^
-字符串的开头(?=.)
-积极向前看,避免匹配空字符串(?:
-第一个非分组模式的开始
(?:
-第二个非分组模式的开始(?:0|[1-4]?\d)?
-该数字匹配从0
到49
的整数,并且该整数可能不存在(?:[,.]\d{1,2})?
-匹配逗号或点后跟一位或两位数的数字,并且该十进制部分可能不存在)
-关闭第二个非分组模式|
-数字50大小写的替代形式50(?:[.,]00?)?)
-匹配50
,后跟逗号或点号,然后匹配0
或00
,其中小数部分是可选的)
-关闭第一个非分组模式$
-字符串结尾 编辑:
要舍弃零值数字,您只需在当前正则表达式中添加负号(?!0*[.,]?0*$)
并使用此正则表达式,
^(?=.)(?!0*[.,]?0*$)(?:(?:(?:0|[1-4]?\d)?(?:[,.]\d{1,2})?)|50(?:[.,]00?)?)$
答案 2 :(得分:0)
这对你有用吗?
(50([.,]0{1,2})?)|([0-4]?[0-9]([.,][0-9]{1,2})?)