好的,所以我对使用正则表达式进行表单验证有一个奇怪的要求,
值的范围可以是-168到10688之间的整数,
负值的负号范围为-168到10688。
这里棘手的部分是,对于所有正值,用户总是必须使用前导
零值,负值为4个字符,负值为5个字符
所以例如:-023有效,00000和00345有效。 0,000,-000无效。
如何在正则表达式中实现?这太复杂了吗?
请帮忙! ;(
答案 0 :(得分:1)
此模式应符合您的描述:
(-[1-9]\d\d|-\d[1-9]\d|-\d\d[1-9]|\d{5})
排除-000
是让这很棘手的原因,所以你最终会遇到4个案例:
-[1-9]\d\d # negative numbers that have a non-zero digit in the first place
-\d[1-9]\d # negative numbers that have a non-zero digit in the second place
-\d\d[1-9] # negative numbers that have a non-zero digit in the third place
\d{5} # all positive numbers with exactly 5 digits
这种模式不会检查上限/下限,因为对于任何编程语言来说这都是微不足道的,并不是正则表达式的目标。
答案 1 :(得分:1)
这应该为你做
^(\d{5}|\-(?!000)\d{3})$
Akxe对于可接受的最大值和最小值是正确的。 RegEx仅用于字符串验证,因此它不允许数学函数。您必须使用JavaScript或服务器端验证客户端。
答案 2 :(得分:0)
我认为这应该有效:
(-|[0-9]{2})[0-9]{3}
详细说明:
NODE EXPLANATION
--------------------------------------------------------------------------------
( group and capture to \1:
--------------------------------------------------------------------------------
- '-'
--------------------------------------------------------------------------------
| OR
--------------------------------------------------------------------------------
[0-9]{2} any character of: '0' to '9' (2 times)
--------------------------------------------------------------------------------
) end of \1
--------------------------------------------------------------------------------
[0-9]{3} any character of: '0' to '9' (3 times)
答案 3 :(得分:0)
S.B&#39。答案((-[1-9]\d\d|-\d[1-9]\d|-\d\d[1-9]|\d{5})
)是正确的,但您仍可能会看到必须将min
和max
属性添加到输入中的事实。
为了方便用户在使用应用程序时,您可能希望自己添加前导零,只需添加注释
PS。:这与角度有什么关系?