正则表达式,负值为负号,正值为前导零

时间:2014-04-17 21:48:43

标签: javascript regex angularjs

好的,所以我对使用正则表达式进行表单验证有一个奇怪的要求,

值的范围可以是-168到10688之间的整数,

负值的负号范围为-168到10688。

这里棘手的部分是,对于所有正值,用户总是必须使用前导

零值,负值为4个字符,负值为5个字符

所以例如:-023有效,00000和00345有效。 0,000,-000无效。

如何在正则表达式中实现?这太复杂了吗?

请帮忙! ;(

4 个答案:

答案 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}))是正确的,但您仍可能会看到必须将minmax属性添加到输入中的事实。
为了方便用户在使用应用程序时,您可能希望自己添加前导零,只需添加注释 PS。:这与角度有什么关系?