对于风向条件的正则表达式(S)

问题描述 投票:-1回答:4

我希望写一个正则表达式来检查风向(多个)条件。我想从用户像这样输入:

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之间,我想给用户选择输入多个条件。

javascript regex
4个回答
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。

但是,你应该考虑,是否在OR分裂您的字符串和AND可能是一个简单的解决方案。


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


0
投票

这应该做的伎俩

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


0
投票

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

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

编辑

制作这将解决您的复杂的需求是一个非常糟糕的主意,下一次ü访问正则表达式的一些变化的Cuz,这将是一个mess.Instead一个正则表达式,

打破代码转换成不同的部分...

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

2>现在通过访问组检查各值,并将其与简单if-else结构比较

© www.soinside.com 2019 - 2024. All rights reserved.