我有一个文本框,其中用户正在构建要评估的数学表达式。
最后,他的表达出现了
4+59+8 //this is just an example.
然而,他也可能输入类似
的内容4+59ab+8
我需要检测出这种错误的组合。 请有人为我提供合适的正则表达式。
答案 0 :(得分:3)
这个正则表达式看起来像你想要的那样:
^[\d-+/*^]+$
它允许数字和数学运算符-
,+
,/
,*
,^
的任意组合。
它并不完美,因为它允许输入只是运算符,或者连续有多个运算符等。虽然可能编写一个只匹配有效表达式的正则表达式,但它可能会更好在实际评估表达式的解析器中执行此操作。使用regexp只是为了进行简单的预验证。
答案 1 :(得分:1)
以下正则表达式(重新设定here):
^([-+]?\d+[-+/*^])*[-+]?\d+$
将匹配以数字序列结尾的行,前面带有一个或多个带有运算符的数字序列。
它将匹配:
95
9+5
但不匹配:
95+
+95
95++5
通过更多调整,您甚至可以对数字和运算符进行极限反应,这样您就不必再次解析表达式了。
修改强>
添加了可选的+/-前缀
答案 2 :(得分:0)
你可以手动走路和检查,例如
var chars = expr.ToCharArray();
var opers = new char[] { '+', '-', '/', '*' };
bool isOp = false;
for (var i = 0; i < chars.Length; i++)
{
char c = chars[i];
if (opers.Contains(c))
{
if (isOp || i == 0)
throw new ArgumentException("operator leads or follows operator @ " + (i + 1));
isOp = true;
}
else if (!char.IsNumber(c))
throw new ArgumentException("found NaN @ " + (i + 1));
else
isOp = false;
}
if (isOp)
throw new ArgumentException("ends with operator");