2012-01-06 50 views
0

我需要一个正则表达式,可以让我输入0-5,000之间的值。我是一个新手,对于正则表达式来说相当新颖。 ^(0?[0-4]?[0-9]?[0-9]?[0-9])$是我迄今为止,但它只会让我去到4,999。谢谢Reg Ex数值范围

+5

您好,欢迎#1。还请提及您正在使用哪种编程语言来处理此正则表达式。 – Animesh 2012-01-06 16:25:40

+1

您使用的语言的一些背景肯定会有所帮助。如果你使用的是正确的语言/平台,你可以通过使用一个对应于实际数值的控件来解决这个问题,并在控件本身设置最大/最小值,而不是使用正则表达式。 – Zannjaminderson 2012-01-06 16:28:43

回答

5

为什么不将这部分字符串解析为数字并将其与正则表达式之外的5000进行比较?如果你使用这个正则表达式,我打赌谁会读你的代码会恨你!

1
println '3,1777' ==~ /[0-4]((\,)\d{1,3})?/ 
println '3,999' ==~ /[0-4]((\,)\d{1,3})?/ 

这就是Groovy。不过,您可以使用支持PCRE的任何语言的正则表达式=)

2

请不要使用正则表达式进行数值范围验证。使用正则表达式来确保字符串匹配模式(即仅包含数字),但只需将该字符串转换为数字并验证该数字即可。

正则表达式不是金色的锤子,只有很多钉子才能有效地使用。

0

^(5000|[1-4][0-9]{3}|[1-9][0-9]{2}|[1-9][0-9]|[0-9])$

2

关注Ilya Kogan的回答。

如果你真的想你可以这样做:

(5000|[1234]?\d{3})(?!\d)