我需要允许以下输入示例:
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,但我想制作一个正则表达式而不是这个。
答案 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})?$
^ ^^^^^
此外,如果您的意思是可以有任何前导空白符号,请用\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})?$
应该这样做。