3

我需要有一个正则表达式,它接受至少 1 位数字和最大 5 位数字,如果用户以以下方式输入零,例如“00”、“000”、“0000”、“00000”,那么表达式应该拒绝这样的输入。目前,我正在使用 ^[0-9]{1,5}$。

4

5 回答 5

3

如果您确保用户的输入格式为带有前导零的 5 位数字,则以下正则表达式将起作用:

^[0-9]{5}(?<!00000)$

这使用负向后查找来确保输入的字符串不是 5 个零。

于 2012-12-11T11:31:47.170 回答
3
^(?=.*[1-9].*)[0-9]{1,5}$

使用前瞻断言确保至少有一个非零数字。如果有一个,则表达式的其余部分仅在 1 到 5 位数字之间匹配。这两个条件都必须满足,否则表达式将不匹配。

不过,同意,如果您尝试匹配一个数字,而不是一串数字(如邮政编码),那么用数字进行比较可能比使用正则表达式更好。

于 2012-12-12T04:33:05.843 回答
1

不好但工作:

从 1 到 99999:[1-9][0-9]{0,4}

从 01 到 09999:0[1-9][0-9]{0,3}

从 001 到 00999:00[1-9][0-9]{0,2}

从 0001 到 00099:000[1-9][0-9]{0,1}

从 00001 到 00009:0000[1-9]

然后把所有这些放在一起:

^(0[1-9][0-9]{0,3}|00[1-9][0-9]{0,2}|000[1-9][0-9]{0,1}|0000[1-9]|[1-9][0-9]{0,4})$

编辑:更新。

于 2012-12-11T10:53:53.867 回答
1

它真的需要是一个正则表达式吗?为什么不检查 if 0 < value && value <=99999

于 2012-12-11T11:17:08.383 回答
0

好的,我明白了,这里的解决方案:^[1-9][0-9]{0,4}$

取 1 到 99999 之间的所有数字

你为什么不使用 RangeValidator 它更简单。

<asp:RangeValidator ID="RangeValidator1" runat="server" ErrorMessage="Value must be greater than zero." ControlToValidate="tbQty" MinimumValue="1" MaximumValue="99999" Type="Integer"></asp:RangeValidator>
于 2012-12-11T10:49:06.723 回答