2012-01-18 74 views

回答

6

类似的东西:

bool ValidateExpression(string expression) 
{ 
    string[] parts = expression.Split("/"); 

    if (
     parts.Length != 2 
     || parts[0].Length != 3 
     || parts[1].Length != 4 
    ) return false; 

    int parsed; 
    return Int32.TryParse(parts[0], out parsed) && Int32.TryParse(parts[1], out parsed);  
} 

稍后用作

bool isValid = ValidateExpression("123/4567"); 
+0

+1也想过这个。 – scottm 2012-01-18 22:42:46

+0

可能不推荐TryParse,因为函数活动异常机制进行了一些乘法运算。所有这些对CPU来说都是昂贵的,而你想要的只是范围比较。不使用常客表达式的好处是性能,不是吗? – AxFab 2012-01-18 23:35:03

5

您可以使用Char.IsDigit来检查字符是否是数字。针对您的特殊情况下,可以做这样的事情:

public bool IsMyStringValid(string myString) 
{ 
    foreach(var c in myString) 
    if(!Char.IsDigit() && !c == '/') return false; 

    return true; 
} 

这实际上是更具体到你的情况(在索引3 3个位数,一个“/”,其次​​是4位数字):

public bool IsMyStringValid(string myString) 
{ 
    if(myString.Length != 8) return false; 

    for(var i = 0; i <8, i++) 
    if(!Char.IsDigit(myString[i]) || (i == 3 && myString[i] == '/') return false; 

    return true; 
} 
+0

在上面的代码中的小点,它会允许多/字符... – Sparky 2012-01-18 22:41:55

+0

@Sparky,公平点。添加了第二个实现来说明OP的问题中的确切字符串。 – scottm 2012-01-18 22:45:56

+0

对于没有分配的解决方案+1。 – DocMax 2012-01-18 22:50:46

2

对于特定的格式,你可以使用:

bool valid = 
    value.Length == 8 && 
    value.Take(3).All(Char.IsDigit) && 
    value[3] == '/' && 
    value.Skip(4).All(Char.IsDigit); 
0

试试这个:

public bool ValidateString(string str) 
    { 
     var strArr = str.Split('/'); 
     return strArr[0].All(char.IsDigit) && strArr[1].All(char.IsDigit); 
    } 

希望这有助于;

+0

如果字符串包含所有数字会发生什么? – dugas 2012-01-18 23:05:02

0

我会使用。所有检查这样的事情所以无论字符串是什么 如果在它是非数字,它不会通过

public static bool IsMyStringValid(string strValidateString) 
    { 
     bool boolIsValid = false; 
     if (strValidateString.All(Char.IsDigit)) 
     { 
      boolIsValid = true; 
     } 
     return boolIsValid; 
    } 
相关问题