-1

我想写一个正则表达式来检查风向条件。我想从用户那里得到这样的输入:

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

BETWEEN,当然是关键字ANDOR括号内可以有多个条件,()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

4 回答 4

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)(?!$))?)+$

成功:

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)

失败:

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 ###)捕获 。

于 2012-10-03T16:16:47.537 回答
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可能是一个更简单的解决方案。

于 2012-10-03T15:44:53.947 回答
0

这应该可以解决问题

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

于 2012-10-03T15:32:45.527 回答
0

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

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

编辑

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

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

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

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

于 2012-10-03T15:33:15.077 回答