正则表达式验证小数点前后的数字,不包括逗号

Regex to validate numbers before and after decimal excluding comma

我正在尝试验证不包括逗号的点前 13 位和点后 4 位的十进制数,即逗号不应计为数字。

有效案例

1,234,567,890,123.1234

1234567890123.1234

123456789012.1234

1234567890123.123

12345.123

1.2

0

有效案例

12345abc.23 // string or special characters  not allowed

1,234,567,890,1231.1234

1,234,567,890,123.12341

12345678901231.1234

1234567890123.12341

当前正则表达式

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

当前 Regex 正在将逗号计为一个数字。

任何帮助都会很棒。

在匹配点之前,您可以使用否定前瞻来断言右边的内容不是数字的 14 倍:

^(?!(?:[^.\s\d]*\d){14})-?\d+(?:,\d{1,3})*(?:\.\d{1,4})?$

说明

  • ^ 字符串开头
  • -? 可选连字符
  • (?! 否定前瞻,断言后面的不是
    • (?:[^.\s\d]*\d){14} 不匹配数字、空白字符或点 14 次
  • ) 关闭前瞻
  • \d+ 匹配 1+ 个数字
  • (?:,\d{1,3})* 匹配逗号、1-3 位数字并重复 0+ 次(或使用 \d+
  • (?:\.\d{1,3})?可选部分,匹配一个点和1-4位数字
  • $ 字符串结束

Regex demo

您可以只指定 , Like 的可选计数

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