【问题标题】:c# regular expression only numerical characters in stringc#正则表达式只有字符串中的数字字符
【发布时间】:2012-01-22 00:03:07
【问题描述】:

我想检查一个未定义长度的字符串是否只包含数字。示例:

"234324" = true
"er32" = false
"1" = true

我试图解决这个问题的方法是这样的:

public bool Validate(string input)
{
    return (Regex.IsMatch(input, @"^\d+$")) ? true : false;
}

现在我不是正则表达式的大英雄,但根据我在互联网上找到的所有内容,"^\+$""^[0-9]$" 表达式都可以,但它不起作用:(

【问题讨论】:

  • 您的输入是否包含某种换行符?这和$ 不匹配将是您的代码在我看来工作的唯一原因。
  • 您是误报还是误报?也很讨厌,但condition ? true : false 等同于condition

标签: c# regex textbox numerical


【解决方案1】:

这里不需要RegEx,您可以使用int.TryParse 来检查string 是否为有效整数。

public bool Validate(string input)
{
     int myNumber;
     return int.TryParse(input, out myNumber);
}

注意IsMatch已经返回bool? true : false没用。

【讨论】:

  • 仅当数字适合 int 时。
  • 这不是正则表达式。但问题是正则表达式。当我有非常大的字符串时,你的答案不正确
【解决方案2】:
int number;
return int.TryParse(input, out number);

【讨论】:

    【解决方案3】:

    "^[0-9]$" 中使用"^[0-9]+$"(注意+ 字符),这意味着将评估多个字符。

    【讨论】:

      【解决方案4】:

      ^\d+$ 应该可以为我工作。你最后的两个例子不起作用,因为^\+$ 缺少d(我认为这是一个错字,但应该是^\d+$),第二个例子需要在右方括号后加一个加号(即^[0-9]+$)。

      我会检查修剪输入是否有影响,您可能有导致问题的空格。否则你的错误在其他地方而不是在这段代码中。

      【讨论】:

        【解决方案5】:

        如果字符串真的可以是任意长度,那么 Ray 说得对,如果字符串表示的数字是 > Int32.MaxValue,则接受答案中的代码将失败。

        以下示例将返回 false 而不是 true:

        bool isNumber = Validate(Int64.MaxValue.ToString()); // isNumber == false
        

        这是一个适用于任意长度字符串的替代解决方案:

        public bool Validate(string input)
        {
           return input.ToCharArray().All(c => Char.IsDigit(c));    
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多