我已使用以下代码成功过滤掉除数字之外的任何内容。我利用PreviewTextInput
事件来捕获当前输入:
private void NumericValidation(object sender, TextCompositionEventArgs e)
{
e.Handled = !_numericValidator.IsMatch(e.Text);
}
_numericValidator
定义为_numericValidator = new Regex("^[0-9]+$");
此代码完全正常,只允许将0-9输入文本框。
但是,我希望允许一个小数,这样输入可以更精确。我在RegexBuddy中测试了以下正则表达式,它可以正常工作,但我可以在文本框中输入1..1
和4.3.5
之类的无效数字。
^(?!\.{2,})(?:\d+)?(?:\.{0,1})?(?:\d+)?$
关于我接下来应该尝试什么的任何建议?
答案 0 :(得分:0)
我在下面提出的示例允许用户在WPF App中输入所有正数。
.
,则会自动更改为0.
如果第一个字符将是0
,第二个字符将是另一个字符,它
自动在点之间添加点。:
<TextBox Width="100" x:Name="tb" TextChanged="Tb_OnTextChanged" FontSize="20" Margin="15,15,15,15"/>
代码:
private void Tb_OnTextChanged(object sender, TextChangedEventArgs e) {
var tbx = e.OriginalSource as TextBox;
string dd = tbx ? .Text;
if (tbx == null || string.IsNullOrEmpty(dd)) return;
var tt = dd.Select(r = > r.ToString()).ToList();
var myregex = ".1234567890".Select(r = > r.ToString()).ToList();
var ss = new List < string > ();
tt.ForEach(o = > {
if (ss.Contains(".") && o != "." || !ss.Contains(".")) {
if (myregex.Contains(o))
ss.Add(o);
if (ss.FirstOrDefault() == ".") {
ss[0] = "0";
ss.Add(".");
}
if (ss.Count == 2 && ss.FirstOrDefault() == "0" && o != ".") {
ss[1] = ".";
ss.Add(o);
}
}
});
var sbc = new StringBuilder();
ss.ForEach(u = > sbc.Append(u));
tb.Text = sbc.ToString();
tb.CaretIndex = tb.Text.Length;
}