风向条件的正则表达式

时间:2012-10-03 15:29:19

标签: javascript regex

我希望写一个正则表达式来检查风向条件。我希望用户输入如下内容:

BETWEEN (45 AND 90) OR (270 AND 320)

BETWEENANDOR当然是关键字,括号()中的多个条件可由OR

分隔

例如:

BETWEEN (45 AND 90)

BETWEEN (45 AND 90) OR (270 AND 320)

BETWEEN (15 AND 40) OR (170 AND 200) OR (270 AND 320)

BETWEEN (45 AND 90) OR (270 AND 320) OR (220 AND 240) OR (270 AND 320)

数值应介于0到360之间。我想为用户提供输入多个条件的选项。

4 个答案:

答案 0 :(得分:2)

这将验证您的行并返回括号之间的匹配。它还确保数字在0到360之间。

^BETWEEN(?:\s*(\((?:[0-2]?[0-9]?[0-9]|3[0-5][0-9]|360)\s+(?:AND)\s+(?:[0-2]?[0-9]?[0-9]|3[0-5][0-9]|360)\))\s*(?:(OR)(?!$))?)+$

SUCCESS:

BETWEEN (45 AND 90)
BETWEEN (45 AND 90) OR (270 AND 320)
BETWEEN (15 AND 40) OR (170 AND 200) OR (270 AND 320)
BETWEEN (45 AND 90) OR (270 AND 320) OR (220 AND 240) OR (270 AND 320)

FAILURE:

BETWEEN (361 AND 90)
BETWEEN (15 AND 40) OR (170 AND 459) OR (270 AND 320)
BETWEEN (45 AND 90) OR (270 AND 320) OR (220 AND 240) OR (270 AND 320) OR
BETWEEN (45 AND 90) OR (270 AND 320) OR (220 AND 240) OR (270 AND 320) ORR
BETWEEN (45 AND 90) OR (270 AND 320) OR (220 AND 240) OR (270 AND 320) OR 

它还使用非捕获组(?: ),以便仅捕获(### AND ###)

答案 1 :(得分:1)

试试这个:

/^BETWEEN \(([0-2]?[0-9]?[0-9]|3[0-5][0-9]|360) AND ([0-2]?[0-9]?[0-9]|3[0-5][0-9]|360)\)( OR \(([0-2]?[0-9]?[0-9]|3[0-5][0-9]|360) AND ([0-2]?[0-9]?[0-9]|3[0-5][0-9]|360)\))*$/

这很长,但它确保您在多个方向之间只有OR ,而不是在结尾或开头。长度数字字符串还确保您只有0(或000)到360之间的数字。

但是,您应该考虑,将您的字符串拆分为ORAND可能是一个更简单的解决方案。

答案 2 :(得分:0)

这应该可以解决问题

/BETWEEN ( ?\(\d+ (AND) \d+\)( OR)?)+/

答案 3 :(得分:0)

您可以使用此正则表达式验证数据...

/BETWEEN (( OR )?\(\d+ AND \d+\))+/

修改

制作一个能够解决您的复杂需求的单个正则表达式是一个非常糟糕的主意,因为下次访问正则表达式进行一些更改时,这将是一个混乱。相反,

将代码分成不同的部分......

1>检查其格式是否正确 BETWEEN (( OR)? \((\d+) AND (\d+)\))+

2>现在通过访问组来检查各个值,并将它们与简单的if-else构造进行比较