我有WPF c#TextBox,必須限制爲最多20個英文字符,10個簡體中文字符或其他類似的字符集。我將MaxLength屬性設置爲20個字符,並且在使用英文鍵盤時工作正常,但如果我選擇了中文鍵盤,則可以輸入20個簡體字符。我們的數據庫字段限制爲20個字節。 謝謝你的幫助。TextBox限制爲20個字符英文,10個簡體中文字符
回答
MaxLength
計算字符數,而不是表示它們所需的字節數。實際上,字符串的字節表示取決於使用的字符編碼。 .NET本身使用UTF-16,其中所有字符(英文和中文)佔用2個字節。我假設你的數據庫使用UTF-8,其中英文字符佔1個字節,中文字符佔2個字節。
您需要動態強制執行限制。您可以通過執行ValidationRule
這樣做,例如下面的。請閱讀Data validation in WPF,以獲得如何與您的TextBox
一起使用的說明。
public class Byte20ValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
int byteCount = Encoding.UTF8.GetByteCount(value.ToString());
if (byteCount <= 20)
return new ValidationResult(true, null);
return new ValidationResult(false, "Too many bytes.");
}
}
感謝您的輸入。真的很有幫助。 –
「.NET本身使用UTF-16,其中所有字符(英文和中文)佔用2個字節。」這不是完全準確的。所有「正常」字符將佔用2個字節,但我相信字符上仍然有奇怪的註釋,甚至可能導致UTF-16必須使用多於2個字節的單個字符。 –
@TimothyShields:你說得對,但OP的文本很可能適用於基本多語言平面(BMP)。這架飛機外的人物將使用代理對來表示。 – Douglas
- 1. 將TextBox限制爲500個字符
- 2. 僅限英文字符
- 3. TEXTBOX限制符號,字符和數字
- 4. TextBox字符長度限制
- 5. Python3將非英文字符轉換爲英文字符
- 6. 限制爲250個字符
- 7. 限制字符爲10過濾器文本字段 - ngTable
- 8. 從字符串中選擇,直到下一個字符爲英文字符
- 9. 限制字符串10個字符的jQuery動態元素
- 10. 如何限制TextBox中的字符?
- 11. 哈希和unhash文本20個字符
- 12. 將[a-z0-9] *限制爲20個字符?
- 13. 如何將標題的長度限制爲20個字符?
- 14. asp.net textbox輸入始終限制爲590個字符
- 15. PHP將20個字母數字字符串轉換爲10個字母數字字符
- 16. Dreaded ????顯示中文文字時不是字符。簡體中文字符問題
- 17. 文本框字符限制
- 18. 文本字符數限制
- 19. 如何限制WPF DataGridTextColum文本最大長度爲10個字符
- 20. 將文本框限制爲VB中的一個字符範圍
- 21. 將SED限制爲行的前10個字符
- 22. 某個服務器上的Directory.GetDirectories將非英文字符更改爲英文字符。爲什麼?
- 23. PHP從數組中選擇10個10字母單詞,受字符池限制
- 24. 非英文字符變爲「。」在linux中的字符
- 25. 如何解碼這個字符串?使用簡體中文字符
- 26. 將字段長度限制爲Oracle Forms中特定項目的10個字符
- 27. 獲得用戶名沒有20個字符限制
- 28. php中文與英文字符分開
- 29. 如何正確渲染中文字符2英文字符寬
- 30. SpannableStringBuffer限制爲9,999個字符?
您是否嘗試過動態設置MaxLength屬性? – dferraro
漢字是2字節 – Jesse
@Jesse,我以爲c#全是unicode,所以所有的字符都是2個字節。 – gunr2171