求满足指定规则的WPF TextBox正则表达式(含代码调整)
WPF TextBox 数字输入验证实现
针对你提出的4条输入规则,修改后的实现如下,同时修复原代码仅验证单个输入字符的局限性:
核心逻辑说明
- 自动将输入的逗号(
,)替换为小数点(.) - 验证输入后的完整文本是否符合规则:
- 仅允许正负数字、最多一个小数点
- 小数部分最多保留两位
- 负号仅能出现在文本开头
修改后的代码
<TextBox PreviewTextInput="NumberValidationTextBox"/>
private void NumberValidationTextBox(object sender, TextCompositionEventArgs e) { // 替换逗号为小数点 string inputText = e.Text.Replace(',', '.'); TextBox textBox = sender as TextBox; if (textBox == null) return; // 构建输入后的完整文本(考虑光标位置和选中内容) string currentText = textBox.Text; string newText = currentText.Remove(textBox.SelectionStart, textBox.SelectionLength) .Insert(textBox.SelectionStart, inputText); // 验证规则的正则表达式 Regex regex = new Regex(@"^-?\d*(\.\d{0,2})?$"); // 允许空文本(用户删除内容的情况),同时验证非空文本是否符合规则 e.Handled = !string.IsNullOrEmpty(newText) && !regex.IsMatch(newText); }
正则表达式解释
^-?\d*(\.\d{0,2})?$
^:匹配文本开头-?:可选的负号,仅允许出现一次\d*:整数部分,允许0个或多个数字(支持先输入小数点的情况,比如.12)(\.\d{0,2})?:可选的小数部分,最多两位数字$:匹配文本结尾
补充说明
如果需要禁止单独输入负号或小数点,可以调整正则为^-?\d+(\.\d{1,2})?$,但这样用户无法先输入小数点再补整数部分,可根据实际需求选择。
内容的提问来源于stack exchange,提问作者online123
相关产品推荐
相关产品推荐

