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

时间:2019-03-29 11:33:17

标签: regex validation matching

我正在尝试验证点号(逗号除外)之前的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将逗号作为数字计数。

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

在匹配点之前,您可以使用负前瞻断言断言右边直接不是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

答案 1 :(得分:0)

您只需指定可选计数,例如

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