发布
社区首页 >问答首页 >数字之间的数字的正则表达式

数字之间的数字的正则表达式
EN

Stack Overflow用户
提问于 2016-06-08 18:48:32
回答 3查看 20.9K关注 0票数 6

我需要一个正则表达式,它需要一个最小值和一个最大值来确定有效的输入,并且我希望最大值和最小值是动态的。

我一直在尝试使用此链接https://stackoverflow.com/a/13473595/1866676来完成此操作

但不能让它工作。所以有人能让我知道怎么做吗?

-更新维克多Stribiż新请求

假设我想创建一个html5输入框,并且我希望它只接受从100到1999的数字

我的正则表达式看起来像什么?正则表达式本身应该与代码应该使用它有关,因为我将在android、iOS和网页上使用它

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-08 19:08:32

首先,虽然可以做到这一点,但我认为如果有一种更简单的方法来选择一个数字范围,比如<input type="number" min="1" max="100">,那么这种方法会更好。

话虽如此,以下是您所请求的正则表达式的工作方式:

代码语言:javascript
代码运行次数:0
复制
ones: ^[0-9]$  // just set the numbers -- matches 0 to 9
tens: ^[1-3]?[0-9]$ //set max tens and max ones -- matches 0 to 39
tens where max does not end in 9 ^[1-2]?[0-9]$|^[3][0-4]$ // 0 to 34
only tens: ^[1][5-9]$|^[2-3][0-9]$|^[4][0-5]$ // 15 to 45

在这里,让我们选择一个从1234到2345的任意数字

代码语言:javascript
代码运行次数:0
复制
^[1][2][3][4-9]$|
^[1][2][4-9][0-9]$|
^[1][3-9][0-9][0-9]$|
^[2][0-2][0-9][0-9]$|
^[2][3][0-3][0-9]$|
^[2][3][4][0-5]$

https://regex101.com/r/pP8rQ7/4

基本上,中间序列的结束总是需要是一个可以达到9的直线范围,除非我们处理的是1位,如果不能,每次我们有一个不能从0开始的值时,你必须将它向上构建到中间,然后一旦我们达到一个不能以9结束的值,就提前中断,并在下一个条件中设置它。

请注意其中的模式,因为每个地方都会固化。还请记住,当处理从较低位置到较高位置时,可选操作符?应该使用。

这有点复杂,但几乎不可能设计一个自定义的范围与一些想法。

如果你更具体,我们可以制作一个确切的例子,但通常是这样做的:beginning-range|middle-range|end-range在某些情况下,你应该只需要开始或结束范围,比如如果最小或最大值不是以9结束。意味着它之后的范围是可选的。(例如,在第一种情况下,它让我们同时拥有单数和双数。

因此,对于100 - 1999,它实际上非常简单,因为你有很多9和0

代码语言:javascript
代码运行次数:0
复制
/^[1-9][0-9][0-9]$|^[1][0-9][0-9][0-9]$/

https://regex101.com/r/pP8rQ7/1

注意:单个值不需要范围n,我添加它们只是为了可读性。

编辑:发现有一个范围生成器。我不知道它有多可靠或稳定,但它乍一看看起来很好,尽管位于:http://gamon.webfactional.com/regexnumericrangegenerator/

票数 14
EN

Stack Overflow用户

发布于 2016-06-08 19:01:16

从本质上说,你不能。

对于每个数字范围,都存在一个与该范围内的数字匹配的正则表达式,因此可以编写代码来生成这样的正则表达式。但这样的正则表达式并不是简单地重新格式化范围结束。

然而,与简单地使用数字方法检查数字的代码相比,这样的代码需要花费大量的精力和复杂性来编写。

票数 3
EN

Stack Overflow用户

发布于 2016-06-08 19:30:57

在HTML5中,只需输入一个范围...

代码语言:javascript
代码运行次数:0
复制
<form>
  Quantity (between 100 and 1999):
  <input type="number" name="quantity" min="100" max="1999">
</form>

使用正则表达式:

代码语言:javascript
代码运行次数:0
复制
^([12345679])(\d)(\d)|^(1)(\d)(\d)(\d)

因此,如果您需要动态地创建正则表达式,这是可能的,但有一点棘手和复杂

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37700372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档