检查字符串的任何子字符串是否包含字母和数字的组合

时间:2013-12-06 12:33:57

标签: c# regex string validation

我有一个文本框,其中用户正在构建要评估的数学表达式。

最后,他的表达出现了

4+59+8 //this is just an example.

然而,他也可能输入类似

的内容
4+59ab+8

我需要检测出这种错误的组合。 请有人为我提供合适的正则表达式。

3 个答案:

答案 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");