【问题标题】:RegEx Numeric Check in Range?RegEx数字检查范围?
【发布时间】:2020-01-28 21:34:58
【问题描述】:

我是 StackOverflow 的新手,所以如果有更好的方法来提出以下问题,请告诉我。

我需要创建一个正则表达式来检测数据库中的字段是否为数字,如果是数字,它是否在有效范围内(即 1-50)。我试过[1-50],除了单个数字前面有0(即06)的情况外,它都有效。 06 仍应被视为有效数字,因为我稍后可以将其转换为数字。

非常感谢您的帮助!我正在尝试了解更多关于正则表达式的知识,并且一直在学习所有我能从:www.regular-expressions.info 中学到的东西。如果你们有其他网站的建议来加强这些东西,我将不胜感激!

【问题讨论】:

标签: regex


【解决方案1】:

试试这个

^(0?[1-9])|([1-4][0-9])|(50)$

这个正则表达式的想法是将问题分解为案例

  • 0?[1-9] 处理单个数字的情况,允许可选的前面 0
  • [1-4][0-9] 处理从 10 到 49 的所有数字。这也允许在单个数字上添加前面的 0
  • 50照顾50

【讨论】:

  • @ybo,是的,它会的。但他们说他们想要 06,所以我认为 00 也是有效的。
  • @Jared,我在您编辑后删除了我的评论,但我仍然理解他需要 1 到 50 之间的值。我认为应该排除 0 和 00。
  • @ybo,你是对的。我更新了答案以排除所有形式的 0
  • 这非常有效。我确实需要排除 00,所以看起来它已经处理好了。这个网站太棒了!感谢大家的帮助!
  • 我认为应该是^0*([1-9])|([1-4][0-9])|(50)$,考虑到006 = 06 = 6,数学范围 [1,50] 内的一个数字,同样适用于 050。或者(我认为更快)^0*([1-4][0-9]?)|(50?)|([6-9 ])$
【解决方案2】:

正则表达式适用于字符(在本例中为数字),而不是数字。您需要为模式中的每个数字位数有一个单独的模式,并将它们与 | (OR 运算符)就像其他答案所建议的那样。但是,请考虑使用正则表达式(如[0-9]+)检查文本是否为数字,然后转换为整数并检查整数是否在范围内。

【讨论】:

    【解决方案3】:

    您不能轻松地使用正则表达式进行范围检查。您可以通过一些工作来开发一种识别数字范围的模式,但它通常非常复杂,并且很难针对稍微不同的范围进行修改。

    你最好把它分成两部分。

    1. 识别数字模式 (^\d+$)。

    2. 在应用程序中检查该数字的范围。

    【讨论】:

      【解决方案4】:

      ^0?[1-50]{1,2}$

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-09
        • 2015-11-28
        • 1970-01-01
        • 2014-11-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-27
        相关资源
        最近更新 更多