我正在做一个项目,该项目需要检查用户是否在文本字段上写了一个好的条件。所以我想知道你们中的一个人是否知道'if'的正则表达式。例如,如果用户写了if ((k <= 5 && k>0)|| x>8)
I 将返回 true。
问问题
43 次
1 回答
0
Keith 的参考资料看起来不错(pegjs.org)。您不是在寻找 lexer + yacc 组合的正则表达式(尽管可以这样做)(请参阅 flex 和 bison)。请注意,您真正要寻找的是“表达式”解析器。一个“简单的计算器”表达式。
一种测试方法是使用“eval()”函数。但是,它被认为是一个危险的功能。然而,在您的情况下,您让最终用户输入一个表达式,然后执行该表达式。如果他们写了危险的东西,他们可能知道自己在做什么,而且他们会自己做。
有关于它的文档:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval
在您的情况下,您将使用 try/catch 执行以下操作以了解它是否有效:
var valid = true;
try
{
// where input.val would reference your if() expression
eval(input.val);
}
catch(e)
{
valid = false;
}
请注意,这是一个穷人解决方案,因为它不会告诉您表达式中是否包含其他代码。可能有一些解决方案,例如在开头添加一些字符串,例如:
eval("ignore = (1 + " + input.val + ")");
现在input.val
几乎必须是一种表达方式。您必须进行测试,看看这是否可以接受。
于 2018-03-02T17:41:20.837 回答