private void textBox1_TextChanged(object sender, EventArgs e)
        {
            
            if (!Regex.IsMatch(textBox1.Text,@"\d+"))
            {
                MessageBox.Show("没有数字");
            }
        }
我是想判断一个文本框是否是数字,这个代码是可以的,问题是 “333.335” 判断是数字我可以接受,但 “333.335kkkkk”也判断是数字,就不太合理了,这个该如何修改呢。

解决方案 »

  1.   

    try...//不允许带小数点
    @"^[1-9][0-9]*$"
    //允许带小数点
    @"^[1-9][0-9]*(\.[0-9]+)?$"
      

  2.   

                try
                {
                    b = Convert.ToDouble(textBox1.Text.Trim());
                }
                catch
                {
                    MessageBox.Show("请输入正确的数字", "错误提示");
                }
      

  3.   

    匹配特定数字:
    ^[1-9]d*$    //匹配正整数
    ^-[1-9]d*$   //匹配负整数
    ^-?[1-9]d*$   //匹配整数
    ^[1-9]d*|0$  //匹配非负整数(正整数 + 0)
    ^-[1-9]d*|0$   //匹配非正整数(负整数 + 0)
    ^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮点数
    ^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配负浮点数
    ^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮点数
    ^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非负浮点数(正浮点数 + 0)
    ^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮点数(负浮点数 + 0)
    评注:处理大量数据时有用,具体应用时注意修正
      

  4.   


    你错在看错楼层了,我没有引用你的既然提到了,就顺便说一下,try...catch是最不被推荐的方法,用捕获异常的方式判断,效率是最低的,是实在没有办法时才使用的方式
      

  5.   


    输入值可以正确转换的时候,效率并不低,但输入值不正确,需要捕获异常时,效率就非常低了,所以在需要频繁调用判断的需求中,最好不用捕获异常的方式用ASCII码判断,效率高,但不能带格式判断
    用正则判断,灵活,可判断格式,效率一般
    还有其它一些判断方式,可根据需求选用
      

  6.   

     public bool IsIntValiadate(string s ) 
            {
                Regex ex = new Regex(@"^\d+$");
                Match m = ex.Match(s);
                if (!m.Success) 
                {
                    return true;
                }
                return false;
            }
    将你要判断的字符传进此方法就可以了,我前阵子也在用.
      

  7.   

    我不会正则textbox只允许输入整数        private void tb_KeyPress(object sender, KeyPressEventArgs e)
            {
                e.Handled = e.KeyChar < '0' || e.KeyChar > '9';   //允许输入数字
                if (e.KeyChar == (char)8)   //允许输入回退键
                {
                    e.Handled = false;
                }
            }textbox只允许输入数字和小数点        public void tbKeyPress(object sender, KeyPressEventArgs e)
            {
                string str = ((TextBox)sender).Text;
                e.Handled = e.KeyChar < '0' || e.KeyChar > '9';   //允许输入数字
                if (e.KeyChar == (char)8)   //允许输入回退键
                {
                    e.Handled = false;
                }
                if (e.KeyChar == (char)46)
                {
                    if (str == "")   //第一个不允许输入小数点
                    {
                        e.Handled = true;
                        return;
                    }
                    else
                    { //小数点不允许出现2次
                        foreach (char ch in str)
                        {
                            if (char.IsPunctuation(ch))
                            {
                                e.Handled = true;
                                return;
                            }
                        }
                        e.Handled = false;
                    }
                }
            }
      

  8.   

    if (!Char.IsNumber(e.KeyChar) & e.KeyChar != Convert.ToChar(Keys.Back) & e.KeyChar != '.')
                {
                    if ((tbox.Text.Length == 1) & (e.KeyChar == '.'))
                        tbox.Text = "0" + tbox.Text;
                    e.Handled = true;
      

  9.   

    private void dataGridView2_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {            
                if (dataGridView2.CurrentCell != null)
                {
                    if (!Regex.IsMatch(dataGridView2.CurrentCell.Value.ToString(), @"^[1-9][0-9]*(\.[0-9]+)?$"))
                    {                    
                        MessageBox.Show("你输入的不是数字");                    
                        
                    }
                    else
                    {
                        MessageBox.Show("真的是数字");
                    }            }        }
    我用上面写法,只要单元格包含"0" 或者 "." 都显示不是数字,我真的是郁闷了,大家都帮忙看一下吧.