regex 数字之间的正则表达式

szqfcxe2  于 2023-06-25  发布在  其他
关注(0)|答案(3)|浏览(116)

我需要一个正则表达式,它需要一个最小值和一个最大值来确定有效的输入,我希望最大值和最小值是动态的。
我一直试图得到这个使用此链接https://stackoverflow.com/a/13473595/1866676但无法得到它的工作。有人能告诉我怎么做吗。
假设我想做一个html5输入框,我希望它只接收从100到1999的数字
像这样的正则表达式是什么样子的?

flmtquvp

flmtquvp1#

首先,虽然可以做到这一点,但我认为如果有一种更简单的方法来选择一个数字范围,如<input type="number" min="1" max="100">,这种方法将是首选。
话虽如此,下面是您请求的正则表达式的工作方式:

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

^[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

/^[1-9][0-9][0-9]$|^[1][0-9][0-9][0-9]$/

https://regex101.com/r/pP8rQ7/1
注意:单个值不需要范围[n],我只是为了可读性而添加它们。
编辑:有一个新的regex范围生成器:https://3widgets.com/

zaqlnxep

zaqlnxep2#

基本上,你不能。
对于每个数值范围,都存在一个匹配该范围内的数字的正则表达式,因此可以编写代码来生成这样的正则表达式。但是这样的正则表达式并不是简单地重新格式化范围结束。
然而,与简单地使用数值方法检查数字的代码相比,这样的代码将需要巨大的努力和复杂性来编写。

j9per5c4

j9per5c43#

与HTML 5简单地把范围输入...

<form>
  Quantity (between 100 and 1999):
  <input type="number" name="quantity" min="100" max="1999">
</form>

使用regex:

^([12345679])(\d)(\d)|^(1)(\d)(\d)(\d)

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

相关问题