【问题标题】:Regex to match numbers starting with 1, maximum 12 digits正则表达式匹配以 1 开头的数字,最多 12 位数字
【发布时间】:2016-10-27 07:50:38
【问题描述】:

我正在搜索匹配任何字符串的正则表达式:

  1. 大于零的数字
  2. 号码至少有一位数字
  3. 不超过 12 位

我试过这个没有成功:

^[1-9][0-9]*{1,12}$

【问题讨论】:

  • 你能有包含前导零但大于零的数字吗?
  • @SebastianProske 会很好,但不必那样。有趣的一点!

标签: regex


【解决方案1】:

如果允许前导零大于零的数字,如果您使用的工具/语言支持前瞻,则可以使用^(?!0+$)[0-9]{1,12}$。前瞻用于确保数字不完全由零组成。

【讨论】:

    【解决方案2】:

    ^[1-9][0-9]{0,11}$

    从 1-9 之间的单个数字开始,然后在 0-9 之间出现 0 到 11 次数字

    【讨论】:

    • 为什么在最后 0-11 位附近有一个捕获组?
    • 你是对的,我的错。我正在用这个表达式测试其他东西,忘记删除该组。现已更新!
    【解决方案3】:

    正则表达式的问题

        ^[1-9][0-9]*{1,12}$
    

    是星号*{1,12} 一起用作星号*表示前一个符号的任意重复次数{1,12} 表示一到十二次重复 - 所以星号*{a,b} 不能混用,必须单独使用,不能一起使用。

    【讨论】:

      【解决方案4】:

      使用^[1-9]\d{0,11}$,它检查非零数字后跟零到 11 位数字。

      您的正则表达式在第二个字符类之后有一个量词*,这将允许一个数字出现零次或多次(可能超过 11 个数字)。此外,量词 {1,12} 将前面模式的最小出现设置为 1,将最大出现设置为 12。因此,您必须避免使用 * 并将最小值和最大值分别设置为 0 和 11,因为已经存在单个数字的模式.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-07
        • 1970-01-01
        • 2014-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多