【问题标题】:how to validate BIGINT in regex如何在正则表达式中验证 BIGINT
【发布时间】:2015-05-23 06:36:00
【问题描述】:

我正在尝试验证 BIGINT mysql 数据类型。但我在re101 上遇到错误,它说范围太大,当它超过 5 位时.. 那么在这种情况下如何验证?

     ^\d{1,980989}$

【问题讨论】:

  • @Ankit 我说我正在验证 BIGINT..
  • 但不能保证是否超过该范围..
  • BIGINT 看起来在-9223372036854775808 to +9223372036854775807 的范围内。您要验证此范围内的数字吗?
  • 据我所知,{1,980989} 匹配任何 1 位到 980989 位的数字...如果我错了,请纠正我,但我认为您不需要那么多数字验证 BIGINT
  • 更多类似^-?\d{1,19}$ 的东西可能就是你所追求的

标签: php mysql regex


【解决方案1】:

你可以使用

\b(?:[0-9]{1,18}|[1-8][0-9]{18}|9(?:[01][0-9]{17}|2(?:[01][0-9]{16}|2(?:[0-2][0-9]{15}|3(?:[0-2][0-9]{14}|3(?:[0-6][0-9]{13}|7(?:[01][0-9]{12}|20(?:[0-2][0-9]{10}|3(?:[0-5][0-9]{9}|6(?:[0-7][0-9]{8}|8(?:[0-4][0-9]{7}|5(?:[0-3][0-9]{6}|4(?:[0-6][0-9]{5}|7(?:[0-6][0-9]{4}|7(?:[0-4][0-9]{3}|5(?:[0-7][0-9]{2}|80[0-7]))))))))))))))))\b

感谢utilitymill.com :)

如果要匹配+ 符号,请在开头添加可选的[+]?

demo

【讨论】:

  • :o 这就是我所担心的...... hhh
  • 前导零怎么样?
  • 小观察,有没有办法允许 -9223372036854775808 因为负数会更大?
  • @Lucas:恐怕您将不得不使用80[0-8] 而不是80[0-7],并在前面加上一个强制性的减号作为替代方案。无法添加减号并更改字符类以匹配正值和负值。
【解决方案2】:

Wiktor Stribiżew 的回答略有不同,以允许 -9223372036854775808,以及前面的 pos/neg 符号。

\b(?:[+-]?(?:[0-9]{1,18}|[1-8][0-9]{18}|9(?:[01][0-9]{17}|2(?:[01][0-9]{16}|2(?:[0-2][0-9]{15}|3(?:[0-2][0-9]{14}|3(?:[0-6][0-9]{13}|7(?:[01][0-9]{12}|20(?:[0-2][0-9]{10}|3(?:[0-5][0-9]{9}|6(?:[0-7][0-9]{8}|8(?:[0-4][0-9]{7}|5(?:[0-3][0-9]{6}|4(?:[0-6][0-9]{5}|7(?:[0-6][0-9]{4}|7(?:[0-4][0-9]{3}|5(?:[0-7][0-9]{2}|80[0-7]))))))))))))))))|-9223372036854775808)\b

边界条件:

  • 9223372036854775807
  • +9223372036854775807
  • 9223372036854775808
  • +9223372036854775808
  • -9223372036854775808
  • -9223372036854775809

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 2021-05-07
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    相关资源
    最近更新 更多