我不确定这是否可以使用正则表达式.我将尝试使用正则表达式,但如果不可能,我将切换到双重验证.
我的数据库(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...
我想你需要
^(?:\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 位数字$- 字符串结尾