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

63lcw9qa  于 2023-05-08  发布在  其他
关注(0)|答案(3)|浏览(162)

我有一个文本框,其中用户正在构建要计算的数学表达式。
最后他的表情变成了

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

但是他也可以键入类似

4+59ab+8

我需要检测这种错误的组合。有人能给我一个合适的正则表达式吗?

7uhlpewt

7uhlpewt1#

这个正则表达式看起来像你想要的:

^[\d-+/*^]+$

它将允许数字和数学运算符-+/*^的任何组合。
它并不完美,因为它将允许输入只是操作符,或者在一行中有多个操作符等。虽然可以编写一个只匹配有效表达式的正则表达式,但在实际计算表达式的解析器中执行此操作可能会更好。使用regexp只是为了简单的预验证。

vfh0ocws

vfh0ocws2#

下面的正则表达式:

^([-+]?\d+[-+/*^])*[-+]?\d+$

将匹配以数字序列结束的行,该数字序列前面有零个或多个带有运算符的数字序列。Is具有可选的+/-前缀。
它将匹配:

95
9+5

但不会匹配:

95+
+95
95++5

通过进一步调整,您甚至可以提取数字和运算符,这样就不必再次解析表达式。

pod7payv

pod7payv3#

您可以只步行并手动检查,例如

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

相关问题