标签:str catch hand 表达 wpf cas textinput regex length
原文地址
http://blog.csdn.net/ghosind/article/details/51627601
作者 ghosind
一,正则表达式过滤字符串
if (RegexString == null) { switch (ConstraintType) { case RestrictType.Int: // 整数 RegexString = @"^[-]?([\d]+)?$"; break; case RestrictType.UInt: // 非负整数 RegexString = @"^[\d]+$"; break; case RestrictType.Double: // 浮点数 RegexString = @"^[-]?([0-9]+)?[.]?([0-9]+)?$"; break; case RestrictType.UDouble: // 正非负浮点数 RegexString = @"^[0-9]+[.]?([0-9]+)?$"; break; case RestrictType.None: // 无限制 default: RegexString = ""; break; } }
二,PreviewTextInput事件 获取textbox 的完整文本,(正常textbox.text是输入前的文本)
if (!Regex.IsMatch(this.Text + e.Text, RegexString)) { e.Handled = true; }
但是如果不是在最后方输入 直接加起来就不行了,这里用到CareIndex属性,(当前光标的位置)
if (!Regex.IsMatch(this.Text.Insert(this.CaretIndex, e.Text), RegexString)) { e.Handled = true; }
但是如果选中一段文字再输入,结果仍然是错误的,所以原作者又用了一个属性SelectionLength,选择文本的长度
最终得到输入后的所有文本的方法终于实现,
private void PreviewTextInput(object sender, TextCompositionEventArgs e) { try { if (!Regex.IsMatch(this.Text.Remove(this.CaretIndex, this.Text.Length >= this.CaretIndex + this.SelectionLength ? this.SelectionLength : 0). Insert(this.CaretIndex, e.Text), RegexString)) { e.Handled = true; } } catch (Exception) { } }
三,用正则表达式过滤输入文本,这个网上资料多得很就不抄了,向原作者致敬
标签:str catch hand 表达 wpf cas textinput regex length
原文地址:http://www.cnblogs.com/nocanstillbb/p/7898574.html