【问题标题】:How do I create a regular expression to accept not more than 10 digits?如何创建一个正则表达式以接受不超过 10 位数字?
【发布时间】:2009-06-23 14:22:29
【问题描述】:

如何创建一个接受不超过 10 位数字的正则表达式?

谢谢

【问题讨论】:

  • 标题“不超过10位数”与问题“少于10位数”不同——它是什么? :)
  • 标题说“不超过10”,问题说“小于10”。你已经得到了这两种情况的答案。仔细挑选;o)
  • @Kev,创建 SO 并不是为了替代您自己的工作。在这里,开发人员可以聚在一起,为他们找不到答案的问题寻求帮助。我并不是说这个问题“太简单了”。我建议这个人没有努力自己解决它。
  • @Devinb - SO 的第三条规则 - “做个好人” :)。你只是在做假设,很多人觉得这个问题已经足够回答了。
  • @Kev 我很好。我投了反对票,并解释了我投反对票的原因。这就是投票的目的。我应该标记“Plz-Send-Teh-Codez”而不是“作业”,你是对的。最后,我敢肯定,如果“正则表达式”被标记为非法内容,那么 SO 将被禁止。

标签: regex validation


【解决方案1】:

既然你问的是“如何”,我会试着一步一步解释。因为您没有指定您使用的是哪种正则表达式风格,所以我将在PCREtwo POSIX regexp variants 中提供示例。

对于像这样的简单 情况,您应该将正则表达式视为自动化,一次接受一个字符,并在它有效时说出一个(接受该字符)与否。在每个字符之后,您可以指定量词它可能出现的次数,例如(在 PCRE 方言中)*(零次或多次)、+(一次或多次)或{n em>,m}(从 nm 次)。那么构造过程就变得简单了:

PRCE  | B.POSIX | E.POSIX   | Comments
------+---------+-----------+--------------------------------------------------
^     | ^       | ^         | Unless you are going to accept anything with 10
      |         |           | digits in it, you need to match start of data;
\d    | [0-9]   | [:digit:] | You need to match digits;
{1,10}| \{1,10\}| {1,10}    | You have to specify there is from 1 to 10 of them.
      |         |           | If you also wish to accept empty string — use 0;
$     | $       | $         | Then, data should end (unless see above).

所以,结果分别是^\d{1,10}$^[0-9]\{1,10}\$^[:digit:]{1,10}$

【讨论】:

  • +1 不错的答案。我正要评论不同的正则表达式风格。
【解决方案2】:
^\d{1,9}$

这将匹配从 1 到 9 的任何数字。

由于您没有指定您正在使用的正则表达式风格,这应该可以让您到达您需要的地方。如果没有,请告诉我们您使用的是哪种正则表达式技术。

【讨论】:

  • 从技术上讲,不超过 10 包括 10,不是吗?
【解决方案3】:

/\D\d{0,10}\D/(假设“小于”包括 0)

/\D\d{1,10}\D/(如果你想要 1 到 10 位数字)

【讨论】:

  • 正好是 10 位数字
  • \D 表示“不是数字”,因此它最多匹配由非数字包围的 9 个数字,例如a123b,但不是 1111111111111111111。
【解决方案4】:

在 Perl 中:

^\d{,9}$

perldoc perlretut 是一个很好的 Perl 正则表达式教程。

【讨论】:

    【解决方案5】:

    我认为这样可以解决问题:

    ^\d{1,10}$

    【讨论】:

    • 他想要少于 10 个数字。
    • 请注意,这也将匹配空字符串,这与 \d{0,10} 不同。就其本身而言,此正则表达式可能存在问题(因为空字符串位于字符串中的任何位置)。如果数字字符串是可选的,并且这是更大的正则表达式的一部分,那将是您想要的。
    • @Zanoni 标题表示要包含10个,这就是我选择包含它的原因。标题和描述之间肯定有一些歧义。
    • 这也将匹配大于 10 位数字的字符串,因为在匹配 1..10 位数字后不需要匹配非数字。
    【解决方案6】:

    /\D\d{,9}\D/ 在 Perl 中

    【讨论】:

      【解决方案7】:

      对于“小于 10”和您想要的至少 1,假设它是唯一的值...

      ^\d{1,9}$
      

      【讨论】:

        【解决方案8】:

        这将在一行中找到至少一个且不超过 9 个数字:

        \d{1,9}

        【讨论】:

          【解决方案9】:

          http://www.regexbuddy.com/

          但我建议在这里划分关注点,只需检查输入后字符串的长度是否

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-08-24
            • 2017-08-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-18
            • 1970-01-01
            相关资源
            最近更新 更多