【发布时间】:2011-06-24 15:34:40
【问题描述】:
我正在研究用户输入的验证逻辑,该逻辑非常接近于 sql where 子句。
在页面上,用户可以从下拉列表的组合中进行选择(其中“-”字符表示最后一个子句中的空白字符):
DropDown1 DropDown2 DropDown3 DropDown4 DropDown5 DropDown6
- - - - - -
( SomeCriteria = Value ) AND
<> OR
不幸的是,我对如何验证这个子句没有任何硬性要求,除了它应该“表现得像一个 sql where 子句”:(
一些应该通过验证
(Criteria = Value)
(criteria1 = Value1 OR Criteria2 <> value2)
(criteria1 = value1) AND (Criteria2 = value2)
(criteria1 = value1) OR (Criteria2 = value2 AND criteria3 = value3)
一些应该无法通过验证的:
)Criteria = value) (first character is not '(' )
(Criteria = value( (last character is not ')' )
((Criteria = value) (# of '(' does not match # of ')' )
(Criteria = Value (AND Criteria1 = value1)) ( 'AND' and 'OR' should not be immediately preceded or followed by a '(' or ')' character.
对于编写正则表达式来验证这些选择的任何帮助将不胜感激。在四处闲逛之后,我看到其他人谈到 sql 解析器对于这个“受限”where 子句会是一个更好的解决方案吗?
【问题讨论】:
-
用户是否将为每个“行”输入自定义值和标准?还是他们只是从预定义的值/标准列表中选择?
-
没有正则表达式可以验证括号的平衡,除非您对问题添加更多约束
-
哦,好吧,我明白你关于需要括号的意思了。不过这里不需要正则表达式。
-
用户如何指定条件?因为我真的看不出需要 7 个下拉菜单,所以只有 1 个下拉菜单和一个添加按钮不是更聪明吗?那样它会一点一点组装起来,你可以展示给用户看吗?这也为您提供了防止用户输入明显非法值的机会(例如,在添加打开之前没有右括号)。
-
@Kelrond 你是对的。因为用户如何制作这样的 stmt: (A == B AND B != C OR (A == B OR (A == C))) 一次带有 3 个右括号..
标签: .net regex parsing validation where-clause