2016-06-08 96 views
0

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

我一直试图让这个使用这个链接 https://stackoverflow.com/a/13473595/1866676

做,但不能得到它的工作。所以有人请让我知道如何做到这一点。

------更新上Wiktor的Stribiżew要求---------

让我们说,我想打一个HTML5的输入框,我希望它只是从100接收号码1999

这样的regex会是什么样子? 正则表达式本身,应该有什么代码应该使用它,因为我打算在Android,iOS和网页上使用这个

+2

你能否请你更新你的问题1)你的样本输入与预期的行为2)你究竟尝试了什么以及如何3)以及当然你的编程语言。 –

+0

我建议你看看[如何编写一个匹配IPv4的正则表达式](https://blogs.msdn.microsoft.com/oldnewthing/20060522-08/?p=31113/)。这不是一个答案(甚至是一个论坛),但是读起来很有趣,并强调了为什么你可以用正则表达式做很多事情,但是你不应该总是这样做。至于你的问题,如果数字不固定,你显然不能写一个静态正则表达式,如果你可以使用一种编程语言来建立表达式,你可以用这种语言来比较一下数字的简单方式。 –

+0

@WiktorStribiżew尝试按照您的要求更新 – DaCh

回答

5

这里是那种正则表达式是如何运作的

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开始的值,并且一旦我们达到一个不能以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]我只是说他们可读性。

+0

'这里,如果理解它,我们可以选择任意数字1234到2345'。如果我使用该正则表达式,我将能够输入2344?我对吗? – DaCh

+0

呃等我犯了一个错误 - 修复 – yosefrow

+1

你有我的信息+1,但这个表达需要放在某个地方,它是在整个方法开始闪烁的大图。如果你把它放在''input pattern =“”>'属性中,你已经写了一个复杂的'max/min'替代。如果您使用JavaScript进行验证,那么您已经为'<' and '>'写了一个错综复杂的替代品。等等。 –

1

本质上,你不能。

对于每个数字范围,都存在一个匹配该范围中的数字的正则表达式,因此可以编写可生成此类正则表达式的代码。但是这样的正则表达式并不是对范围末端进行简单的重新格式化。

但是,与仅使用数字方法检查数字的代码相比,此类代码需要编写巨大的工作量和复杂性。

+1

不是这方面的专家,但既然它是html5,他需要正则表达式来过滤它。如果不是,他将不得不将值传递到另一个页面来验证它们? '^ [1-9] [0-9] [0-9] $ |^1 [0-9] [0-9] [0-9] $'会抓住这一切吗? – Andreas

+0

@Andreas你是对的。我为此开发了一个系统。它比人们想象的要容易。查看下面的答案 虽然它在一些情况下肯定可能是矫枉过正,因为波希米亚人建议 – yosefrow

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) 

所以,如果你需要创建dinamically正则表达式这是可能的,但有点棘手和复杂的

+0

出于好奇...纯HTML可以实际执行限制,还是仅相应地设置元素的样式? –

+0

该值将受到限制,但注意:Internet Explorer 9和更早版本不支持输入标记的最大和最小属性.-- 注意:最大和最小属性在Internet Explorer 10中不适用于日期和时间(或更新版本)或Firefox,因为IE 10+和Firefox不支持这些输入类型.--注意:任何人都可以伪造客户端验证,所以它在服务器上验证始终也很重要http://www.w3schools .com/tags/tryit.asp?filename = tryhtml5_input_max_min – yosefrow

+0

当然,任何输入都可能是假的客户端,所以你需要一个验证服务器端(JavaScript可以跳过更多的difficoulty但跳过正常输入)。 – MrPk