2013-10-28 64 views
1

好,所以我正在構建一個WPF格式的程序。 如你所知wpf的輸入通常是字符串,把它們變成double首先我需要驗證這些字符串是否合適,然後繼續並轉換它們。 問題是在驗證中,我已經完成驗證中的部分是檢查是否string.IsNullOrEmpty但我無法做的事情是驗證如果答案是完全不可轉換的...讓我舉個例子因爲一些字符串不是完全的數字仍然應該被接受,例如:字符串雙驗證c#請回答

「sadasdaasd」 - 不接受(顯然)

「8945a4554」 - 不接受(有一個「A」在中間)

「3519」 - 接受

「12.55」 - 接受

「-3/4」 - 接受並且值應該被轉換爲雙(-3)除以(4)。所以'/'被接受,它將字符串拆分2,然後將其轉換爲第一部分/第二部分的雙精度值。

我一直試圖做這個驗證一整天,仍然沒有成功,我已經嘗試搜索網絡的一些輸入驗證,有人說我需要使用double.TryParse(字符串,出雙)但此功能不適用於我想要的「/」分割。所以請幫助我!

+0

如果唯一違反'TryParse'的情況是分數,那麼你不能僅僅解析出它們嗎?TryParse是分子和分母,並且使用計算? – admdrew

+0

TryParse是答案,但您需要分三步完成。首先,拆分字符串(如果需要的話),然後嘗試解析雙方(或者只有一個,如果沒有兩個),最後根據需要進行計算。 – Jacob

回答

1

我會開始解析你的字符串通過正則表達式(q:是「-3 * 4」可接受-3倍4?)。基本上你正在尋找一個正則表達式的匹配,這是這​​樣的(這在-3/4工作,你想要進一步測試並修改是否允許乘法運算):-?\d+[/]\d+

如果您發現匹配,解析出你的字符串爲string.Split('/'),它會給你一串字符串。 TryParse每個人,並做數學。

如果沒有匹配,請使用TryParse(如前所述)。這將會成功(在你的例子中是3519,12.55)或者失敗(在你的例子中是sadasdaasd,8945a4554)。注意:你也可以使用string.Contains('/'),但是你必須檢查它是否包含多個斜線(除非這樣的事情被允許 - 在這種情況下,你需要重溫那個正則表達式)。

+0

你可以像寫在程序中那樣寫給我,就像確切的代碼一樣......並且請添加乘法。如果這兩者確實存在,那麼你可以跳過拆分字符串的部分,因爲我已經完成了它。 – DavidS47

+0

不。有很多關於如何在C#中使用正則表達式以及字符串操作的問題。先嚐試一些事情。如果這些不起作用,請發佈關於哪些代碼與某些代碼不兼容的具體問題。 – AllenG

+0

你只是發佈正則表達式代碼的問題? – DavidS47