包含或不包含逗号的整数的正则表达式

时间:2016-12-13 09:49:20

标签: regex regular-language

我想为所有种类的数字创建正则表达式,即整数(+ ve和-ve)和十进制数(+ ve和-ve),带或不带逗号。

例如,正则表达式应涵盖以下数字格式。

  111     1.11     1,111     1,111.01     1,111,111.01 
 +111    +1.11    +1,111    +1,111.01    +1,111,111.01
 -111    -1.11    -1,111    -1,111.01    -1,111,111.01

我已经创建了两个正则表达式来处理我的场景。

 "^(\\+|-)?[0-9]\\d*(\\.\\d+)?$"   // handles whole numbers with decimals
 "^(\\+|-)?[0-9]\\d*(\\,\\d+)*?$"  // handles whole numbers with commas

现在,我想合并这两个正则表达式以满足我的要求。

任何人都可以帮助我吗? 提前谢谢。

3 个答案:

答案 0 :(得分:2)

这个怎么样:

 ^[+-]?\d+(,\d+)?(\.\d+)?$

您可以看到它正常工作here

答案 1 :(得分:2)

这是我的解决方案,只允许逗号之间的3位数:

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

<强>解释

^           : start of string
[+-]?       : optional + or -
\d{1,3}     : 1 to 3 digits (before the first optional comma)
(?:         : non capturing group
  ,\d{3}    : a comma followed by 3 digit
  |         : OR
  \d+       : 1 or more digits
)*          : group present 0 or more times
(?:         : non capturing group
  \.\d+     : decimal dot followed by 1 or more digits
)?          : optional
$           : end of string

答案 2 :(得分:1)

你可以合并你的这两种模式,如

^[+-]?[0-9]+(?:,[0-9]+)*(?:[.][0-9]+)?$

请参阅regex demo

<强>详情:

  • ^ - 字符串的开头
  • [+-]? - 可选的+-
  • [0-9]+ - 一位或多位
  • (?:,[0-9]+)* - 零个或多个序列:
    • , - 逗号
    • [0-9]+ - 一位或多位
  • (?:[.][0-9]+)? - 可选序列:
    • [.] - 一个点
    • [0-9]+ - 1+位数
  • $ - 字符串结尾

更严格的正则表达式只允许分组中的3位数字看起来像

^[+-]?[0-9]{1,3}(?:,[0-9]{3})*(?:[.][0-9]+)?$
           ^^^^^         ^^^

如果你想要匹配整个零件而没有千位分隔符:

^[+-]?(?:[0-9]{1,3}(?:,[0-9]{3})*|[0-9]+)(?:[.][0-9]+)?$