2013-07-30 32 views
1

我创建了一个Regexp来验证-359和+359(带有可选符号)之间的方向角度。这是我的正则表达式:添加两位十进制数字到数字范围正则表达式

const QString xWindDirectionPattern("[+-]{0,1}([0-9]{1,2}|[12][0-9]{2}|3[0-5][0-9])"); 

现在,我想补充的两个十进制数,以写数字从-359.99至359.99。我试过类似追加\。[0-9] {1,2} | [0-9] {1,3}但它不起作用。

我想有可选的小数点,所以我可以有

23.3 valid 
23.33 valid 
23  valid 
23.333 not valid 

我读过一些其他的问题,比如this one,但我不能修改这个例子来匹配号码范围,就像我的情况一样。 我怎样才能达到这个结果?

在此先感谢您的答复。

这怎么能实现呢?

回答

1

你可以这样做:

[+-]{0,1}((?:[0-9]{1,2}|[12][0-9]{2}|3[0-5][0-9])(?:\.[0-9]{1,2})?) 

这将允许后面跟着一个或两个数字的小数点。你可能也想用开始和结束锚(^/$),以确保没有比你的字符串—没有这个这种模式其他字符,23.333将被允许的,因为23.33上述模式匹配:

^[+-]{0,1}((?:[0-9]{1,2}|[12][0-9]{2}|3[0-5][0-9])(?:\.[0-9]{1,2})?)$ 

你可以测试一下here

+0

我可以写359.88,但我也可以写,例如6334,但在这种情况下不允许有小数点。 – Jepessen

+0

@Jepessen我认为整个想法是支持-359.99到359.99之间的范围。为什么要允许6334? –

+0

Infact我说我可以写6334,但我不应该被允许。 – Jepessen

2

我创建了一个正则表达式以度来验证方向,-359和+359

号之间,你不能。你不应该。您正在使用错误的工具。正则表达式不能进行各种验证,这就需要挖掘字符的语义。

正则表达式只能处理和匹配文本,但不能识别它们实际上的含义。基本上,正则表达式对解析常规语言很有好处,对几乎所有其他语言都不好。

对于例如为:

  • 一个正则表达式可以匹配3个数字,但它是非常不切实际的,用它来搭配3位落于范围 - [259, 634]。为此,您需要知道该号码中每个单独数字的含义。
  • 正则表达式可以匹配日期的模式,如\d\d/\d\d/\d\d,但它不能识别哪个部分是date,哪个部分是month
  • 同样,它可以找到你两个号码xy,但它不能识别,是否x < y或不。

上述任务要求您了解文本的含义。正则表达式不能这样做

嗯,当然,你也来了肯定的正则表达式,但你可以看到它是高度非弹性。你的需求有一点改变,会使两者都受到影响 - 正则表达式和你。

你应该更好地运用相应的语言功能 - 结构,如if-else,以确保你正在阅读度在该范围内,而不是正则表达式。

+0

我插入后验证数字,但我想这样做,因为我有一个网格单元格,我必须把这个值,我必须创建一个验证程序,以避免用户在写入时写入错误的数据,如插入字母或放置无效值。我认为regexp是一个很好的工具,但也许你可以提出更好的建议? – Jepessen

+0

@Jepessen。那么,可以通过正则表达式进行某种验证,例如,测试用户没有任何字母表,只需要数字,或字段应该以特定字母开头,只包含给定集合中的字符,以及应该具有指定的长度。但是,像我说的一些验证,以确定一个数字的范围是无法完成的。你应该使用适当的语言结构。顺便说一句,你在用什么语言? –

+0

另请参见[this](http://programmers.stackexchange.com/q/113237/66382)和[this](http://stackoverflow.com/q/7553722/1679863)文章。 –

1

尝试[+-]?([1-9]\d?|[12]\d{2}|3[0-5]\d)(\.\d{1,2})?

[+-]?   Optional Sign 
[1-9]\d?  1 or 2 digit number 
[12]\d{2}  100 to 299 
3[0-5]\d  300 to 359 
(\.\d{1,2})? Optional decimal point followed by 1 or two digits 
+0

它似乎没有工作。我可以写1,12,2,但不是2.4,200 ecc – Jepessen

+0

您是否尝试用'^'和'$'来锚定正则表达式? – Phylogenesis

+0

是的,我也试过了。 – Jepessen

相关问题