[英]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.