有人可以帮我做正则表达式吗?
代码如下:
<TextBox PreviewTextInput="NumberValidationTextBox"/>
private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
{
Regex regex = new Regex("[^0-9.]+");
e.Handled = regex.IsMatch(e.Text);
}
谢谢。
“^-?[0-9]*[\\.,]?[0-9]?[0-9]?$”
这会检测到有效输入,但不会将“,”转换为“.”。只需跟进一个字符串替换来处理它。您将能够安全地假设此时测试中的任何“,”都应该是“.”。
问题出在你的方法上:
e.Text 给出输入的字符而不是 TextBox 的内容
所以这个解决方案给出了等待的结果:
private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
{
Regex regex = new Regex("^-?[0-9]*[\\.,]?[0-9]?[0-9]?$");
var futureText = $"{(sender as TextBox).Text}{e.Text}";
e.Handled = !regex.IsMatch(futureText);
}
要用
,
替换 .
我建议您添加 TextChanged 事件:
private void OnTextChanged(object sender, TextChangedEventArgs e)
{
var myInput = sender as TextBox;
myInput.Text = myInput.Text.Replace(",", ".").Trim();
myInput.CaretIndex = myInput.Text.Length;
}
<TextBox PreviewTextInput="NumberValidationTextBox" TextChanged="OnTextChanged"/>
我玩属性
CaretIndex
保持光标在最后一个位置(替换重置光标在第一个位置的位置)
我已经将
.trim()
添加到myInput.Text = myInput.Text.Replace(",", ".").Trim();
因为previewtextInput事件不玩空间(它的正常)