簡體   English   中英

檢查字符串的任何子字符串是否包含字母和數字的組合

[英]Checking if any substring of a string contains a combination of Alphabets and numbers

我有一個文本框,其中用戶正在構建要評估的數學表達式。

最后他的表情出現了

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

但是他也可能輸入類似的東西

4+59ab+8

我需要檢測出這種錯誤的組合。 請有人為我提供合適的正則表達式。

這個正則表達式看起來像你想要的:

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

它將允許數字和數學運算符的任意組合-+/*^

它並不完美,因為它允許輸入只是運算符,或者連續有多個運算符等。雖然可以編寫一個只匹配有效表達式的正則表達式,但最好這樣做實際評估表達式的解析器。 使用regexp只是為了進行簡單的預驗證。

以下正則表達式( 在這里重新說明 ):

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

將匹配以數字序列結尾的行,前面是帶有運算符的零個或多個數字序列。

它將匹配:

95
9+5

但不匹配:

95+
+95
95++5

通過更多調整,您甚至可以對數字和運算符進行極限反應,這樣您就不必再次解析表達式。

編輯

添加了可選的+/-前綴

你可以手動走路和檢查,例如

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM