【问题标题】:c# check for integers in a textboxc# 检查文本框中的整数
【发布时间】:2014-04-14 11:01:36
【问题描述】:

我正在尝试检查文本框是否包含数字。问题是它总是返回它包含一个非数字字符。 我尝试了几种方法,但似乎都没有。

我尝试过的一种方法是:

if( Regex.IsMatch(tb.Text.Trim(), @"^[0-9]+$")) // tb.Text is the textbox 

无论我在文本框中输入什么,它总是返回它包含一个非数字字符(我尝试输入 1-9、'a'、'b')

【问题讨论】:

  • 文本框是否只有一个字符
  • 是的,我用 1 个字符和多个字符都试过了
  • 你为什么用这么复杂的正则表达式而不是“\d”?见stackoverflow.com/questions/3180354/…
  • 您是要解析TextBox 值还是要检查它是否包含数字?
  • 您的正则表达式失败,因为您声明它的方式只能是由 ^(start) 和 $(end) 指示的数字。如果你忽略那一点,它应该可以工作

标签: c# regex string textbox int


【解决方案1】:

您可以将字符串解析为特定的数字类型,即

double result;
if (!double.TryParse(tb.Text, out result))
{
  //text is not a valid double;
  throw new Exception("not a valid number");
}
//else the value is within the result variable

从您的正则表达式看来,您只需要整数值,因此您应该改用int.TryParselong.TryParse


快速而肮脏的测试程序:

void Main()
{
    TestParse("1");
    TestParse("a");
    TestParse("1234");
    TestParse("1a");
}

void TestParse(string text)
{
  int result;
  if (int.TryParse(text, out result))
  {
    Console.WriteLine(text + " is a number");
  }
  else
  {
    Console.WriteLine(text + " is not a number");
  }
}

结果:

1 is a number 
a is not a number  
1234 is a number  
1a is not a number

【讨论】:

    【解决方案2】:

    您可以为此替换 Regex

    if(Regex.IsMatch(tb.Text.Trim(), @"[0-9]"))
    

    或者为此:

    if(Regex.IsMatch(tb.Text.Trim(), @"\d"))
    

    【讨论】:

    • 不错的编辑,正要请你阅读上面的评论。
    • \d 是什么意思你能解释一下这个表达式吗,我对正则表达式很陌生
    • @Blackunknown 是的,你记得我\d 也存在。
    • @EhsanSajjad \d 是匹配十进制字符
    • 这两个我都知道,但它们似乎也不起作用
    【解决方案3】:

    您可以使用 TryParse:

    int value;
    
    bool IsNumber = int.TryParse(tb.Text.Trim(), out value);
    
    if(IsNumber)
    {
        //its number
    }
    

    【讨论】:

    • 我刚试过这个方法,不行。它仍然返回它包含一个非数字字符
    • 如果不是数字,它应该可以工作,你输入了什么?
    • 我在文本框中输入了'3',以及'a',它们都返回了true
    • 你同时输入了 3 和 a
    • 你一定在做点什么,我在我的系统上测试过它可以工作。
    【解决方案4】:
    private void btnMove_Click(object sender, EventArgs e)
            {
                string check = txtCheck.Text;
                string status = "";
                for (int i = 0; i < check.Length; i++)
                {
                    if (IsNumber(check[i]))
                    status+="The char at "+i+" is a number\n";
                }
                MessageBox.Show(status);
            }
            private bool IsNumber(char c)
            {
                return Char.IsNumber(c);
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      相关资源
      最近更新 更多