具有最大长度的小数的正则表达式

Nic*_*rin 6 c# regex

我不确定这是否可以使用正则表达式.我将尝试使用正则表达式,但如果不可能,我将切换到双重验证.

我的数据库(postgresql)接受decimal15,6(最多15位,最多6位小数),所以如果我有10个整数位,我可以有5位小数.小数分隔符被忽略.

我目前有这个正则表达式(逗号是小数点分隔符):

^\d{1,15}(\,\d{1,6})?$

它不验证总长度,只验证左边的数字.但既然用户也可以输入点数(千位分隔符),我有这个怪物:

^((\d+)|(\d{1,3}(\.\d{3})+)|(\d{1,3}(\.\d{3})(\,\d{3})+))((\,\d{4})|(\,\d{3})|(\,\d{2})|(\,\d{1})|(\,))?$

这个不接受超过3位小数.我可以编辑这个以接受6次decimais,但我仍然无法验证总长度.

是否可以验证号码的总长度?忽略点和逗号.

正则表达式应该接受:

1234567890,123456

1.234.567.890,123456

当然还有其他任何中间价值观:

1.234,12,1,0,1...

Wik*_*żew 4

我想你需要

^(?:\d{1,3}(?:\.\d{3}){0,4}|\d{1,15})(?:,\d{1,6})?$
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

整数部分仅允许 1 到 15 位数字(或 5 组以数字分组符号分隔的 3 位数字块.),并且可以选择后跟逗号和 1 到 6 个十进制数字。

  • ^- 字符串的开头
  • (?:\d{1,3}(?:\.\d{3}){0,4}|\d{1,15})- 2 个替代方案:
    • \d{1,3}(?:\.\d{3}){0,4}- 1 至 3 位数字,后跟 0 至 4 个点 ( \.) 和 3 位数字 ( \d{3})序列
    • |- 或者
    • \d{1,15}- 1 至 15 位数字
  • (?:,\d{1,6})?- 可选的逗号序列(出现 1 次或 0 次),后跟 1 到 6 位数字
  • $- 字符串结尾