正则表达式数字范围检查?

13

我是StackOverflow的新手,如果有更好的提问方式,请告诉我。

我需要创建一个正则表达式来检测数据库中的字段是否为数字,并且如果它是数字,是否落在有效范围内(即1-50)。 我尝试了[1-50],它可以工作,但对于单个数字前面带有0的实例(即06)不起作用。 由于稍后可以将其转换为数字,因此06仍应被视为有效数字。

非常感谢您的帮助!我正在尝试学习更多关于正则表达式的知识,并从www.regular-expressions.info 学习所有我能够学到的内容。如果您们有其他学习这方面知识的网站推荐,我会非常感激!


这个相关的问题可能有帮助:如何使用正则表达式匹配 X 和 Y 之间的数字? - Tomalak
重复:https://dev59.com/zHRB5IYBdhLWcg3wQVSV - S.Lott
1
我不会称它为重复;这是另一个问题的特殊情况,而且简单得多。 - Alan Moore
这个回答解决了您的问题吗?如何使用正则表达式匹配X和Y之间的数字? - StayOnTarget
4个回答

17

试一下这个

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

这个正则表达式的思路是将问题分解成几种情况:

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

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

5

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


2

使用正则表达式无法轻松进行范围检查。您可以 - 经过一些努力 - 开发出识别数字范围的模式,但通常相当复杂,并且难以为稍微不同的范围修改。

最好将其分成两个部分。

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

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


1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接