Javascript 带负号表示负值,前导零表示正值的正则表达式

Javascript 带负号表示负值,前导零表示正值的正则表达式,javascript,regex,angularjs,Javascript,Regex,Angularjs,好的,我有一个奇怪的要求,使用正则表达式进行表单验证 值的范围可以是介于-168和10688之间的整数 负值的减号范围为-168到10688 这里棘手的部分是,对于所有的正值,用户总是必须使用前导 负值要求为4个字符,正值要求为5个字符的零 例如:-023有效,00000和00345有效。0,000,-000无效 如何在regex中实现这一点?这会不会太复杂了 请帮忙;(我认为这应该有效: (-|[0-9]{2})[0-9]{3} 详情: NODE EX

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

值的范围可以是介于-168和10688之间的整数

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

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

负值要求为4个字符,正值要求为5个字符的零

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

如何在regex中实现这一点?这会不会太复杂了


请帮忙;(

我认为这应该有效:

(-|[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)

此模式应与您的描述相匹配:

(-[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
但是,这种模式不会检查上界/下界,因为这对于任何编程语言来说都是微不足道的,并且不是正则表达式真正的目标。

S.B.“答案(
([1-9]\d\d\d |-\d[1-9]\d |-\d[1-9]\d{5}
)是正确的,但您可能仍然会看到这样一个事实:您必须将
min
max
属性添加到输入中。
为了方便用户在使用应用程序时使用,您可能希望自己添加前导零,请注意。

注:这和角度有什么关系?

这应该可以帮你

^(\d{5}|\-(?!000)\d{3})$

Akxe对于可接受的最大值和最小值是正确的。RegEx仅用于字符串验证,因此不允许使用数学函数。您必须使用JavaScript验证客户端或服务器端是否有效。

“-023”-但不会使用此模式。o_OSorry此匹配许多超出可接受值范围的值…不能为[0-9]{4}因为这将匹配大于10688的所有内容,仅举一件事…谢谢你的想法。我只关注数字格式部分。我认为对于min/max正则表达式不是最好的工具。为什么不将min=”“max=”“属性添加到输入标记(并使用input type=“number”)?是的。我认为将min=”“max=”“属性添加到输入标记(并使用输入类型=“编号”)应该和Bryan的更干净版本的正则表达式一起使用…谢谢你的帮助!!这也匹配所有大于10680的值…我要寻找的范围在-168和10680之间…为什么一种编程语言检查上/下限很简单?我看到这对正则表达式没有用处,但它可能吗?确定吗这是可能的,但是如果你决定你的新上限应该是23456,你会得到一个4倍长的正则表达式模式,几乎无法理解,而且很难改变。我明白了。这很有道理,谢谢你的帮助和解释!我想我会把它放在那里,因为我使用angularjs作为前端…使用ng-Pattern我实际上也在使用angularjs做regex客户端,我认为在输入标记中添加min=”“max=”“属性(并使用input type=“number”)应该可以与您更干净的regex版本一起使用……谢谢您的帮助!!没问题。乐于助人:)