创建正则表达式以匹配数字或数字范围

时间:2018-07-12 07:11:23

标签: regex

我一直在查看正则表达式帮助页面,但似乎找不到/理解解决方案。

我的问题是:我想要一个正则表达式,该正则表达式专门允许一个数字或一定范围的数字,这些正则表达式将集成在代码中以进行数据输入验证。例如,一个人只能输入格式完全相同的“ 12”或“ 12-50”,不能输入任何破折号或其他任何内容。

我为ex。“ 12-50”创建的解决方案是[0-9][-][0-9],效果很好。但是,我无法将上述正则表达式与允许该格式以及仅允许单个数字格式的正则表达式集成在一起。

我尝试使用OR运算符[0-9]|[0-9][-][0-9],但是它似乎无法完美运行,因为我可以输入“ 12-”,“ 123 ---”等“不正确的格式”。

2 个答案:

答案 0 :(得分:0)

首先[0-9][-][0-9]与整个“ 12-50”不匹配,仅与“ 2-5”子字符串不匹配。这就解释了您的误报:在每种情况下,正则表达式都匹配一个子字符串。

因此,您需要首先匹配整个字符串:^…$

此外,您还希望数字序列而不是单个数字,所以说:\d+匹配一个或多个数字('\ d'匹配一个数字 [1] )。

类似这样:

^\d+(-\d+)?$

应该工作。展开

^         Start of string
\d+       One or more digits
(         Start of group
   -\d+   Dash followed by one or more digits
)         End of group
?         Preceding element – the group – is optional
$         End of string

[1] ,取决于您的特定正则表达式引擎,它可能与Unicode中的非ASCII数字匹配,但是您需要为此检查文档。

答案 1 :(得分:0)

要使用完全匹配模式,您需要使用开始和结束指示符。

  

^:表示开始

     

$:表示结束

     

| :使用或条件提供多个正则表达式

     

'+':查找至少一种错误

^(([0-9]+)|([0-9]+[-][0-9]+))$