我有一個TextBox,它有一個LostFocus事件處理程式,呼叫一個方法將TextBox中的數字字串格式化為數字格式。例如,123456,78回傳123 456,78。
如果我改用123 45開始,它將正確地回傳12 345,00。
但是,如果我先輸入123456,78,它正確地回傳123 456,78,然后用退格鍵洗掉TextBox中的最后四個字符,即我通過點擊退格鍵四次來洗掉6,78,它沒有作業。它只是保持123 45在TextBox中。
然而,如果我選擇TextBox中的所有文本并粘貼123 45,它將正確回傳12 345,00。
當我通過逐行除錯時,我看到方法引數amountIn正確地存盤了字串123 45,無論是在我使用退格鍵還是在我選擇和粘貼時。然而,Regex.IsMatch()在我使用退格鍵時回傳false,在我選擇和粘貼時回傳true。 因此,我相信退格會在字串中留下某種偽裝,在除錯時不可見,但會被IsMatch()方法識別。下面是我的方法:
private void txtAmount_LostFocus(object sender, e)。
{
txtAmount.Text = ReformatAmount(txtAmount.Text)。
}
public static string ReformatAmount(string amountIn)
{
string amountOut;
if (Regex.IsMatch(amountIn, @"^[0-9 , .] $")
{
amountOut = Regex.Replace(amountIn, "[. ] ", "")。
amountOut = Convert.ToDecimal(amountOut).ToString("N"/span>)。
return amountOut;
}
else; return amountOut; }
{
amountOut = amountIn;
return amountOut;
}
}
uj5u.com熱心網友回復:
瑞典的CultureInfo.NumberFormat.NumberGroupSeparator是非斷裂空間字符,char 0xA0(160),而不是char 0x20(32),即通常用來分隔,例如,單詞的空白。
你可以看到它更好的寫作:
var cultureSE = CultureInfo.GetCultureInfo("se-SE") 。
string hexChar = ((int)cultureSE.NumberFormat.NumberGroupSeparator[0]).ToString("X2")。
hexChar將是"A0"。
正在使用的Regex,^[0-9 ,.] $并沒有考慮到這一點,它只考慮char 0x20。
你可以把它改為只考慮[0-9 ,.] 來忽略它,但你可能想用s來代替,它也會匹配所有Unicode白位符,包括非斷裂白位符,作為char0xA0.
。
也請參見。正則運算式中的字符類
然后可以在以下內容中更改運算式:
if (Regex.IsMatch( amountIn, @"^[0-9s,.] $"/span>)
{
//轉換為特定文化的數字表示。
uj5u.com熱心網友回復:
不需要正則運算式:
string[] nums = new[] 。
{
"123456,78",
"123 456,78"。
"6,78"。
"123 45"。
};
foreach (var num in nums)
{
if (Decimal.TryParse(num, NumberStyles.Any, null, out decimal result)
{
// Number successfully parsed:
Console.WriteLine($"{result:N2}")。)
}
else; }
{
///這里決議錯誤。
Console.WriteLine($"Could not parse: '{num}'") 。
}
}
輸出:
123 456, 78
123 456,78。
6, 78
12 345,00。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/309693.html
標籤:
