我不确定使用正则表达式是否可行。我会尝试使用正则表达式,但如果不可能,我会切换到双重验证。
我的数据库 (postgresql) 接受 decimal
为 15,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 个小数位,但我仍然无法验证总长度。
是否可以验证号码的总长度?忽略点和逗号。
正则表达式应该接受:
1234567890,123456
1.234.567.890,123456
当然还有任何其他中间值:
1.234,12
, 1,0
, 1
...
最佳答案
我觉得你需要
^(?:\d{1,3}(?:\.\d{3}){0,4}|\d{1,15})(?:,\d{1,6})?$
查看 regex demo
整数部分只允许 1 到 15 位数字(或 5 组 3 位数字 block ,用 .
数字分组符号分隔),并且可选地后跟逗号和 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 位数字$
- 字符串结尾
关于c# - 具有最大长度的小数正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36840723/