如果string包含一个字母,则抛出错误?

时间:2014-01-14 11:30:25

标签: c# asp.net-mvc string

传入字符串列表:

List<string> quantity

如果字符串包含所有数字,代码就可以了。但是,如果用户在数量部分输入“字母”并提交代码中断。

需要在数量清单中检查它不包含字母,如果是,请返回VIEW并显示错误消息:

foreach (string q in quantity)
{
    if (q //if q == letter?)
    {
        _notifier.Information(T("A letter has been entered for quantity. Please enter a number"));

        return Redirect(returnUrl);
    }
}

我怎么说q是一个字母?

感谢任何回复

4 个答案:

答案 0 :(得分:7)

您可以使用Char.IsLetter,这是一个简短的LINQ版本,用于检查是否有任何字符串包含字母:

bool anyWrong = quantity.Any(s => s.Any(Char.IsLetter));

或相反的方式,使用Char.IsDigit检查所有内容是否有效:

bool allCorrect = quantity.All(s => s.All(Char.IsDigit));

另一种选择是检查是否可以将所有字符串解析为intlong,例如:

long l;
bool allCorrect = quantity.All(s => long.TryParse(s, out l));

如果您还想允许指数表示法,可以将decimal.TryParseNumberStyles.Float一起使用:

List<string> quantity = new List<string> { "1000000000E-100" };
decimal d;
bool allCorrect = quantity
   .All(s => decimal.TryParse(s, NumberStyles.Float, CultureInfo.InvariantCulture, out d));

答案 1 :(得分:4)

您可以使用LINQ扩展方法:

if (!q.All(Char.IsDigit)) {
  // not only digits
}

答案 2 :(得分:3)

由于您已将其标记为MVC ..您应该使用数据注释来验证您的属性。 E.g:

public class YourModel {
    public IList<QuantityModel> Quantities { get; set; }
}

public class QuantityModel {
    [RegularExpression(@"\d+")] // <--- this
    public int Amount { get; set; }
}

这样可以避免手动验证您的属性......正如您目前正在尝试的那样。

答案 3 :(得分:0)

假设您只接受正整数,您应检查列表中的每个字符串是否为空或为null并且包含除数字之外的任何内容(不仅字母是'A'..'Z','a'..'z'但是,说'+','{',命令字符等)。你可以通过LINQ来做到这一点:

  // All strings within quantity contains digits only
  if (!quantity.All(c => (!String.IsNullOrEmpty(c)) && c.All(Char.IsDigit(c)))) {
    _notifier.Information(T("A letter has been entered for quantity. Please enter a number"));

    return Redirect(returnUrl);
  }