首页 > 解决方案 > 用逗号匹配十进制 12,2 的正则表达式以分隔数千个组

问题描述

我想确保输入在小数点前不超过 10 位,以便匹配 DECIMAL(12,2)。

我已经尝试过:

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

但它也计算小数点后的数字,所以我要匹配的是:

1,111,111,111.00

所以它会在有或没有小数的情况下保持匹配,我尝试的只能匹配:

1,111,111,111

标签: phpregexdecimal

解决方案


您可以从字符串的开头断言,右边是一个数字的 1-10 倍,后跟一个可选的逗号,后跟一个点和 2 个数字。

然后使用模式来匹配确切的格式。

请注意,在您的模式中(\.[0-9]+)?,末尾可以匹配超过 2 个数字。如果要匹配可选的点和 2 位数字,请使用(?:\.[0-9]{2})?

^(?=(?:\d,?){1,10}(?:\.\d{2})?$)[0-9]{1,3}(?:,[0-9]{3})*(?:\.[0-9]+)?$

正则表达式演示


推荐阅读