1 private void newport_TextChanged(object sender, EventArgs e) 2 {//需要:不允许以0开头,大于1,小于65535,只能是整数 3 var reg = @"^\d+$";//正则表达式,整数 4 bool IsMatch = Regex.IsMatch(newport.Text, reg); 5 if(!IsMatch) 6 { 7 8 string s = newport.Text; 9 Regex regex = new Regex(reg); 10 newport.Text = s.Replace(reg, null);//替换,可以运行,替换不了,求教 11 12 } 13 else 14 { 15 }
刚刚学,想做一些免费工具共享出去.比较菜,还请不吝赐教,非常感谢!
正则是想当用户在newport.Text中输入或粘贴"1a123"这样的内容时,把整数以外的字符过滤掉,留下数字,变成1123这样的结果
另外不允许以0开头,大于1小于65535
private void newport_TextChanged(object sender, EventArgs e) { var source = sender as TextBox; if (source != null) { int num; if (int.TryParse(source.Text, out num) && num >= 1 && num <=65535) { return; } } source.Text = string.Empty; }
你好,可以把数字保留,不要全部清空吗?
var source = sender as TextBox; if (source != null) { int num; if (int.TryParse(source.Text, out num) && num >= 1 && num <= 65535) { return; } } if (string.IsNullOrEmpty(source.Text)) return; source.Text = source.Text.Substring(0, source.Text.Length - 1); source.SelectionStart = source.Text.Length;
@zge8:
非常感谢!这个方法简单厉害,测试后就是发现先输入123,再在前面输入了0还是可以以0开头
@zge8:
在int num 上面加一句: source.Text = source.Text.TrimStart("0");
@水牛刀刀: source.Text.TrimStart("0");错误 1 与“string.TrimStart(params char[])”最匹配的重载方法具有一些无效参数
("0")错误 2 参数“1”: 无法从“string”转换为“char
@zge8: source.Text.TrimStart('0');
我以前写的一个限定Int输入的txt控件.你看看有用没!
1 using System.Text.RegularExpressions; 2 using System.Windows.Forms; 3 4 namespace H.Control 5 { 6 class IntTxt : TextBox 7 { 8 public IntTxt() 9 { 10 11 } 12 13 protected override void OnKeyPress(KeyPressEventArgs e) 14 { 15 if (!(e.KeyChar == '\b')) 16 { 17 if (string.IsNullOrEmpty(this.Text)) 18 { 19 if (!Regex.IsMatch(e.KeyChar.ToString(), "[1-9]")) 20 { 21 e.Handled = true; 22 return; 23 } 24 } 25 else 26 { 27 string num=this.Text+e.KeyChar.ToString(); 28 if (!Regex.IsMatch(num, "^[1-9]*[1-9][0-9]*$")) 29 { 30 e.Handled = true; 31 return; 32 } 33 } 34 } 35 } 36 } 37 }
你好,可以把数字保留,不要全部清空吗?
@zge8: 我不知道你试了吗?我重写的这个txt控件,以0开头输入,是没有反应的,而且绝对只能输入数字!
至于范围限定,略作修改就ok!
@vbhyc: 我是直接复制进去的,是不是不行?
@zge8: 你新建个类,再复制进去,注意命名空间,生成下!然后你会在工具栏里,看到这个控件!
看你代码,不知道你想干什么。只是告诉你你这边理解有问题。你的方法string.Replace(string oldvar,string newvar) 方法,这个方法的作用是替换指定的内容为新内容,如:
string errString = "This docment uses 3 other docments to docment the docmentation";
string correctString = errString.Replace("docment", "document");
而你这边oldvar其实是个正则,但这个函数会把你的正则表达式解释成字符串,即要替换字符串@"^\d+$";为null,你觉得在你的这里实际上,他替换不?
谢谢,你说的意思我明白了,但是怎么做才能让它过滤非数字,不是把@"^\d+$"认成是字符串呢?
@zge8: 正则也有replcae方法的。Regex.Replcae,你去msdn下这个方法。很简单很好用的,这边我就不直接给你上代码了
不知道你想表达什么。
那你就在文本框改变事件里,用正则表达示匹配,然后去除字母后重新赋值到文本框中,具体自己实现。
@lonely_rain: 思路我知道,就是不会方法
string inputTxt = "0234fghs34534";//改成你要输入的 System.Text.StringBuilder sb = new StringBuilder(); var ch = inputTxt.ToCharArray(); Regex reg = new Regex(@"^\d+$"); foreach (var c in ch) { if (reg.IsMatch(c.ToString())) { sb.Append(c); } } int i = 0;//最终结果 int.TryParse(sb.ToString(), out i); if (i > 65535) { i = 65535; }
试试吧.
[^0]?\d*
学习学习