对于美分,没有前缀0的价格场正则表达式

时间:2011-08-08 21:14:28

标签: asp.net regex validation expression field

我正在使用以下正则表达式来验证价格字段:

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

除了当用户输入表格.60等的价格时,它的工作绝对完美。如果我在前面添加0,如0.60,它似乎工作正常,但我想允许用户省略0作为前缀。

2 个答案:

答案 0 :(得分:2)

将此语法用于(optional_subgroup)?,即嵌套在另一对括号'(...)'中并附加'?'

在您的情况下,整个子部分(\d{1,3}(\,\d{3})*|(\d+))是可选的。因此

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

但是现在这将匹配完全空的表达式,即0整数和0个十进制数字。 所以我们必须要求至少1个整数位(+可选的小数部分) ...

((\d{1,3}(\,\d{3})*)|(\d+))(\.\d{2})?

至少2位小数(+可选整数部分)) ...

((\d{1,3}(\,\d{3})*)?|(\d+))(\.\d{2})

所以匹配这两个中的任何一个(INTEGER)(DECIMAL)?|(INTEGER)?(DECIMAL) - 如果你告诉我们更多,我们可以压缩你的正则表达式。

或者,后处理匹配(在ASP中)以拒绝0整数+0十进制数字的情况。 (你可以发布那个ASP片段吗?)

不要将小数点全部匹配。您是否允许使用单个十进制数字取决于您:.1

答案 1 :(得分:1)

(\d{1,3}(\,\d{3})*|(\d*))(\.\d{2})?$