如何验证一个字符串值,该值只有在输入数字时才返回true

时间:2014-11-13 17:56:18

标签: c#

如果返回除数字以外的任何内容,我需要扩展此代码以调用GetReasonForFailure方法。

123 =无效

ABC =无效

1234567890 = IsValid

NULL = IsValid

using System.Linq;
namespace WorksheetValidator.Rules
{
    public class ImportCommodityCode : IRule
    {
     public bool IsValid(string value)
    {
        return string.IsNullOrEmpty(value) || value.Length == 10 ;
    }

    public string GetReasonForFailure(string value)
    {
        return string.Format("[{0}]  Codes should be 10 digits long and only contain numbers", value);
    }
}

}

7 个答案:

答案 0 :(得分:1)

Int32.TryParse不能在此上下文中使用,因为9999999999大于Int32.MaxValue因此它会溢出并且转换失败。 你可以使用long.TryParse,或者,如果你想要一个IEnumerable解决方案,你可以写

public class ImportCommodityCode : IRule
{
    public bool IsValid(string value)
    {
        return string.IsNullOrEmpty(value) || 
               (value.Length == 10 && 
               !value.AsEnumerable().Any (t => !char.IsDigit(t)));
    }
}

此代码符合您的要求,即您认为NULL(或空)字符串应被视为有效,尽管我对此条件有点困惑。但是,使用

更改该部分很容易
 return !string.IsNullOrEmpty(value) && ....

答案 1 :(得分:0)

使用long.TryParse

public bool IsValid(string value)
{
    long temp;
    return string.IsNullOrEmpty(value) || (value.Length == 10 && long.TryParse(string, out temp));
}

编辑:其他人都是对的;使用long.TryParse()int 2147483648溢出,不会为您提供全部10位数字。

答案 2 :(得分:0)

public bool IsValid(string value)
{
    return string.IsNullOrEmpty(value) || value.Length == 10 && Regex.IsMatch(value, @"^[0-9]+$");
}

答案 3 :(得分:0)

试试这个:

public bool IsValid(string value)
{  
    return string.IsNullOrEmpty(value) || value.ToArray<char>().All<char>(i=>char.IsDigit(i));
}

答案 4 :(得分:0)

不确定我是否明白......检查一个字符串是否代表一个数字,你可以尝试将其转换为整数或双数(如果是这样的话)

   int n = 0;
   if (Int32.TryParse(value, out n))
   {
   }

HTH, Cabbi

答案 5 :(得分:0)

使用正则表达式

public bool IsValid(string value)
{
    return Regex.IsMatch(value, @"^[0-9]{10}$");
}

答案 6 :(得分:0)

根据您的规范:

public static bool IsValid(string value)
{
    return value == null || (value.Length == 10 && value.All(Char.IsDigit));
}