我需要一个正则表达式,它使用最小和最大数字来确定有效输入,并且我希望最大值和最小值是动态的。
我一直在尝试使用此链接完成此操作 https://stackoverflow.com/a/13473595/1866676
但无法让它发挥作用。所以有人可以让我知道如何做到这一点。
------WiktorStribiżew请求更新---------
假设我想制作一个html5输入框,我希望它只能接收从100到1999的数字
这样的正则表达式会是什么样的? 正则表达式本身,应该与应该使用它的代码有关,因为我将在android,iOS和网页上使用它
答案 0 :(得分:7)
以下是这种正则表达式的工作原理
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 的直线范围,除非我们正在处理那些地方,如果它不能,你必须向上建立它中间每次我们有一个不能从0开始的值,然后一旦我们达到一个不能提前结束的值,并将其设置为下一个条件。
注意每个地方固化的模式。还要记住,在处理从较低位置到较高位置时,可选运算符?应该使用。
它有点复杂,但是通过一点思考来设计自定义范围几乎是不可能的。
如果您更具体,我们可以制作一个确切的示例,但这通常是如何完成的: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]我只是添加了它们以便于阅读。
更新:差不多3年后,发现有一个范围发生器。我不知道它有多可靠,但它起初看起来很好:http://gamon.webfactional.com/regexnumericrangegenerator/
答案 1 :(得分:2)
基本上,你不能。
对于每个数值范围,都存在一个与该范围内的数字匹配的正则表达式,因此可以编写可以生成此类正则表达式的代码。但是这样的正则表达式并不是对范围结束的简单重新格式化。
然而,与仅使用数字方法检查数字的代码相比,此类代码需要巨大的努力和复杂性。
答案 2 :(得分:1)
使用HTML 5只需输入范围...
<form>
Quantity (between 100 and 1999):
<input type="number" name="quantity" min="100" max="1999">
</form>
使用正则表达式:
^([12345679])(\d)(\d)|^(1)(\d)(\d)(\d)
因此,如果您需要以动态方式创建正则表达式,那么它可能会有点棘手和复杂