传入字符串列表:
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是一个字母?
感谢任何回复
答案 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));
另一种选择是检查是否可以将所有字符串解析为int
或long
,例如:
long l;
bool allCorrect = quantity.All(s => long.TryParse(s, out l));
如果您还想允许指数表示法,可以将decimal.TryParse
与NumberStyles.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);
}