|   |      1 
                                  79
                             
 使用正则表达式验证数值范围
 要清楚:当一个简单的if语句足够 
 不建议使用正则表达式验证数值范围。 
 此外,由于正则表达式分析字符串,因此在测试数字之前,必须首先将其转换为字符串。一个例外是当数字碰巧已经是一个字符串时,例如从控制台获取用户输入时。 
 
   (要确保字符串是以数字开头,可以使用
    
 尽管如此,弄清楚如何用正则表达式验证数字范围还是很有意思和指导意义的。 (此答案中的链接来自 Stack Overflow Regular Expressions FAQ ) 
 一个数字范围
 
   
    规则:
   
   数字必须准确
    
 最简单的范围是。与之匹配的正则表达式是 
   
    Word boundaries
   
   必须避免与
    
 两位数的范围
 
   
    规则:
   
   号码必须介于
    
   (这些组是“或”ing所必需的,但它们可以是
   
    non-capturing
   
   :
    
 数字范围“镜像”在零左右
 
   
    规则:
   
   号码必须介于
    
 
   这是一个正则表达式
    
 自由间隔: 
 使这对消极和积极两方面都起作用就像添加一个 optional 开始冲刺: (这假定短划线前没有不适当的字符。) 到 禁止 负数,A negative lookbehind 是必要的: 
 
   离开了望台会导致
    
 
   注:
    | 
|   |      2 
                                  14
                             别用它,但这很管用。:)  | 
|   |      3 
                                  5
                             这么多的答案,但是没有人在评论中读到(或关心)运营方面的问题? 
 正如很多答案正确指出的那样,在这种情况下使用regex是很糟糕的,让我们考虑一下ocaml中的其他方法吧!我使用ocaml已经有一段时间了,但是通过查找一些构造,我可以将其组合在一起: 如果有什么不清楚的地方,请阅读它的语法, type conversion functions 和 exception handling 和 input-output functions . 
   用户输入部分仅用于演示。使用
   
     | 
|   |      4 
                                  5
                             分析问题如果您“必须”使用正则表达式,请通过分析接受的置换来分解问题。 “从-2055到2055的范围”可以表示为: 
 “从0到2055的数”可以是有限个特定置换中的一个: 
 请注意,在本正则表达式中,不需要区分范围“0-9”和“1-9”,只有最后两个范围对接受的数字/字符(用星号表示)的范围有任何限制。 编写组件正则表达式上述每个组成部分都很容易单独表示为正则表达式: 
 把这些表达放在一起整个匹配的相关表达式为: 或者稍微简洁一点: 假设 输入只包含“数字”而不包含其他内容,因此最终的正则表达式是: 如果有必要允许前导加号,这将变为: Here's a js fiddle 演示上一个regex通过了什么,失败了什么。 | 
|   |      5 
                                  4
                             为什么只使用regex检查一个数字?  | 
|   |      6 
                                  4
                             作为对aliteralmind所提供的伟大表达的一种替代方法,这里有一种更长但有趣的方法,以便了解另一种方法可能是什么样的 (还有不该做的事) . 这是一个有趣的练习,因为你可以想到 两种截然不同的方法 :大致上,您可以: 
 不努力,你怎么知道哪一个是最好的?事实证明,第一种方法(aliteralmind的答案)要经济得多。 下面,我包括一个 系列试验 在php语言中,以防您或其他人想要检查输出。 下面,我将在“自由间隔模式”中为您提供regex,它允许在regex中添加注释,这样您就可以很容易地理解它的作用。然而,并不是所有的regex引擎都支持自由间隔模式,所以在我们开始讨论有趣的部分之前,这里将regex作为一个一行程序。 注意你的问题提到的数字从-2055到2055。我以为你想匹配“正常数字”,不带前导零。这意味着regex将匹配999而不是0999。如果你想要前导零,让我知道,这是一个非常简单的调整。 
   另外,如果在utf-8模式下匹配,则
    作为一行的regex 自由间隔模式下的正则表达式 系列试验 这些测试试图与-100000到100000之间的数字相匹配。它们产生以下输出: 代码如下: 速度测试 这是我简单的速度测试的结果,匹配范围从-1米到+1米。正如卡西米尔所指出的,如果阿利泰拉明的表达被锚定,那么它的速度将加快25%! 以下是测试代码:  | 
|   |      7 
                                  3
                             试试这个:  | 
|   |      8 
                                  3
                             查看这个为数值范围生成正则表达式的伟大工具: http://gamon.webfactional.com/regexnumericrangegenerator/ 
   对于OP请求的范围,它生成:
    | 
|   |      9 
                                  1
                             试一试 非常简单的正则表达式 . 视觉表现 
    
 它是 很容易理解 . 
 
 示例代码:(为了更清楚起见,请阅读内联注释。) 输出:  | 
|   |      10 
                                  0
                             试试这个: 
   括号前的正则表达式与可选的
    
   括号中的第一部分(
    
   括号中的第二部分(
    
   括号中的第三部分(
    | 
|   |      11 
                                  0
                             又一个-  | 
|   | DotFX · RegEx捕获关键字前但括号后的所有内容 8 月前 | 
|   | Andrus · 如何在sql中查找第二个匹配项 9 月前 | 
|   | iato · 确保正则表达式不从命名材料中的数字中提取 9 月前 | 
|   | vr8ce · 非成对标记中特定字符的正则表达式 9 月前 | 
|   | MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 9 月前 | 
|   | Carsten · 使用最近的搜索模式更改文本块 10 月前 |