我正在尝试验证点号(逗号除外)之前的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
将逗号作为数字计数。
任何帮助都会很棒。
答案 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位数字$
字符串的结尾答案 1 :(得分:0)
您只需指定可选计数,例如
^[0-9]{0,1}([,])?[0-9]{0,3}([,])?[0-9]{0,3}([,])?[0-9]{1,3}(\.[0-9]{0,3})?$