用于格式化小数点逗号的正则表达式和数千个点的格式

时间:2016-09-01 13:52:16

标签: regex

我需要允许以下输入示例:

             n,nn

            nn,nn

           nnn,nn

         n.nnn,nn

        nn.nnn,nn

      nnn.nnn,nn

     n.nnn.nnn,nn

    nn.nnn.nnn,nn

   nnn.nnn.nnn,nn

我做到了:

(^[0-9]{1,3}(\,[0-9]{1,2})?$)

(^[0-9]{1,3}(\.[0-9]{3})(\,[0-9]{1,2})?$)

(^[0-9]{1,3}(\.[0-9]{3})(\.[0-9]{3})(\,[0-9]{1,2})?$)

如果找到这三个中的一个而不是ok,但我想制作一个正则表达式而不是这个。

2 个答案:

答案 0 :(得分:2)

您可以添加组(?:\.\d{3})*以匹配所有可选的3位数分组,并在开头添加 *以允许任意数量的空格(0或更多):

^ *\d{1,3}(?:\.\d{3})*(?:,\d{1,2})?$

请参阅regex demo

如果您还需要匹配1234567,99等数字,则可以添加其他分支:

^ *(?:\d{1,3}(?:\.\d{3})*|\d+)(?:,\d{1,2})?$
   ^                     ^^^^^ 

请参阅another regex demo

此外,如果您的意思是可以有任何前导空白符号,请用\s模式替换文字空间。

请注意,如果您的正则表达式引擎不支持\d,请改用[0-9]

<强>详情:

  • ^ - 字符串开头
  • * - 零个或多个空格(或\s* - 0+空格)
  • \d{1,3} - 1至3位数字
  • (?:\.\d{3})* - 零个或多个. + 3位数序列
  • (?:,\d{1,2})? - 可选序列:
    • , - 逗号
    • \d{1,2} - 1或2位数字
  • $ - 字符串结束。

答案 1 :(得分:1)

使用'*'表示零次或多次重复,使用'\'表示数字。所以:

^\d{1,3}(\.\d{1,3})*(\,\d{1,2})?$

应该这样做。