我正在使用以下正则表达式来验证价格字段:
(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?$
除了当用户输入表格.60等的价格时,它的工作绝对完美。如果我在前面添加0,如0.60,它似乎工作正常,但我想允许用户省略0作为前缀。
答案 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})?$