1

我有这个正则表达式

[0-9]+(,[0-9][0-9]?)?

它匹配 345563,24 但如何将左侧部分限制为 8 个字符?
88888888,00 - true 因为 8 个字符
999999999,00 - false 因为 9 个字符

4

4 回答 4

2

用这个:

[0-9]{0,8}(,[0-9][0-9]?)?

{m,n}表示前一个字符/组的最小和最大出现次数。您可以通过将表达式的一侧留空来指示最小值或最大值。所以上面的表达式允许一个数字出现 0 到 8 次。如果您希望在表达式开头出现 1 到 8 个数字,请使用以下命令:

[0-9]{1,8}(,[0-9][0-9]?)?
于 2013-01-31T13:24:32.387 回答
2

我会做 :

 ^[1-9][0-9]{,7}(,[0-9][0-9]?)?$
  • 数字 (10,2) 将被匹配
  • 空字符串将不匹配
  • 第一个数字不应为 0(零)
于 2013-01-31T13:30:36.177 回答
1

从@Kent@user1775603的答案中借用元素,我会尝试以下方法:

^([1-9][0-9]{0,7}|0)(,[0-9][0-9])?$

这将匹配:

  • 任何以非零开头的最多八位数字,逗号后有零位或两位小数
  • 任何数字 >= 0 和 < 1,逗号后有零或两位小数(匹配数字0,xx在哪里x

请注意,小数分隔符,除非您注意不这样做,否则通常取决于语言环境。究竟如何解决这个问题取决于您使用的语言和/或框架,但这是需要注意的。

于 2013-01-31T13:44:51.517 回答
0

我会推荐\b而不是^$

\b([1-9][0-9]{0,7}|0)(,[0-9][0-9]?)?\b

这样输入就不需要单独输入,也可以在大文本的中间找到。

于 2013-01-31T13:54:33.653 回答