我希望写一个正则表达式来检查风向(多个)条件。我想从用户像这样输入:
BETWEEN (45 AND 90) OR (270 AND 320)
BETWEEN
,AND
和OR
当然关键字可以有内括号()
多个条件由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之间,我想给用户选择输入多个条件。
尝试这个:
/^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
可能是一个简单的解决方案。
这将验证您的生产线,并在括号之间返回匹配。它还确保编号为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 ###)
被捕获。
这应该做的伎俩
/BETWEEN ( ?\(\d+ (AND) \d+\)( OR)?)+/
您可以使用此正则表达式来验证数据...
/BETWEEN (( OR )?\(\d+ AND \d+\))+/
编辑
制作这将解决您的复杂的需求是一个非常糟糕的主意,下一次ü访问正则表达式的一些变化的Cuz,这将是一个mess.Instead一个正则表达式,
打破代码转换成不同的部分...
1>检查其是否以正确的格式BETWEEN (( OR)? \((\d+) AND (\d+)\))+
2>现在通过访问组检查各值,并将其与简单if-else
结构比较