我想为所有种类的数字创建正则表达式,即整数(+ 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
现在,我想合并这两个正则表达式以满足我的要求。
任何人都可以帮助我吗? 提前谢谢。
答案 0 :(得分:2)
答案 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]+)?$