2015-06-25 91 views
0

我在C#中的正則表達式應該返回IsMatch = TRUE,只有當輸入具有所需的圖案,但實際上,如果某些字符匹配時,返回true ...怎麼會是正確的正則表達式?正則表達式匹配的表達只有這些情況

Regex reg = new Regex(@"[0-9 \-+]"); //accept only numbers, spaces, minus character and plus character 

string formularight="1123 - 4432+32124";//its correct 

bool validformat=reg.IsMatch(formularight)) //returns true, ok 

string formulawrong="1123a - 4432+32124"; //it has one letter ismatch should be false... 

validformat=reg.IsMatch(formulawrong)) //returns true, not ok 

我後來檢查,如果每個號碼的下一個數字之前跟有負或加號,但如果它可以包含在正則表達式驗證...

我檢查了其他的正則表達式的問題,有人前建議我使用一個數據表來計算()的expresion或使用一些計算器邏輯請知道,在這種情況下,號碼一樣使用,我將用它來從數據庫中獲取某些值不是數值本身的字段名。所以我只需要解析公式之前的正則表達式驗證。由於

Valid examples for regex: 
11123 
112 - 1121 
112-1121 
1221111+554-111135678 
44332-54-114 

Invalid examples (letters present, not a + or - between numbers,...): 
112 - 
6543e 
112 1121 
6543e + 4432 
-7632 
+0

你們都是說得對的開始和結束錨......什麼事情錯過:/ – VSP

回答

1

如何:

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

這適用於您的有效和無效的示例。

爲了括號匹配的數字:

^\[?\d+\]?(?:\s*[+-]\s*\[?\d+\]?)*$ 
+0

如果你可以請修改正則表達式,所以它也接受括號內的數字,我會很樂意接受你的答案。示例:124 + [4211] - 332或[1121]或[1675] - 1111 ... – VSP

+0

@ ase69s:請參閱我的編輯。 – Toto

1

你應該開始在你的正則表達式最終主播:

Regex reg = new Regex(@"^[0-9 +-]+$"); 

,以確保整個輸入匹配給定的字符集。

isMatch Reference

+0

隨着> 250K代表,你能買得起搜索重複? – Rawling

+0

我不是一個.NET人,很難回答.NET上的任何問題。我可以發現一個問題,並通過查找鏈接的MSDN驗證並回答。 – anubhava

+0

有[非](http://stackoverflow.com/questions/6298566/regex-match-whole-string) - [.NET](http://stackoverflow.com/questions/5997673/regex-to-match -full-string)也重複。 – Rawling

2

Regular Expression發現幾場比賽,因爲你沒有強迫它整個輸入相匹配。

通過下面的錨,它將被強制檢查整個輸入。

  • ^ - 啓動
  • $ - 完

正則表達式:

^[0-9 \-+]*$ 

Regexr:http://regexr.com/3b97l