C# 若字符串包含字母,抛出错误?
传入字符串列表:C# 若字符串包含字母,抛出错误?,c#,asp.net-mvc,string,C#,Asp.net Mvc,String,传入字符串列表: List<string> quantity 我怎么能说q是一个字母 感谢您的回复您可以使用LINQ扩展方法: if (!q.All(Char.IsDigit)) { // not only digits } 您可以使用,下面是一个简短的LINQ版本,用于检查任何字符串是否包含字母: bool anyWrong = quantity.Any(s => s.Any(Char.IsLetter)); 或者相反,使用以下方法检查所有内容是否有效: 另一个选项
List<string> quantity
我怎么能说q是一个字母
感谢您的回复您可以使用LINQ扩展方法:
if (!q.All(Char.IsDigit)) {
// not only digits
}
您可以使用,下面是一个简短的LINQ版本,用于检查任何字符串是否包含字母:
bool anyWrong = quantity.Any(s => s.Any(Char.IsLetter));
或者相反,使用以下方法检查所有内容是否有效:
另一个选项是检查是否可以将所有字符串解析为int
或long
,例如:
long l;
bool allCorrect = quantity.All(s => long.TryParse(s, out l));
如果还希望允许指数表示法,则可以将decimal.TryParse
与numberstyle.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));
列表数量=新列表{“1000000000E-100”};
十进制d;
bool allCorrect=数量
.All(s=>decimal.TryParse(s,NumberStyles.Float,CultureInfo.InvariantCulture,out d));
因为您已将其标记为MVC。。您应该使用数据注释来验证属性。例如:
public class YourModel {
public IList<QuantityModel> Quantities { get; set; }
}
public class QuantityModel {
[RegularExpression(@"\d+")] // <--- this
public int Amount { get; set; }
}
公共类模型{
公共IList数量{get;set;}
}
公共类量化模型{
[RegularExpression(@“\d+”)]/假设您只接受正整数,您应该检查列表中的每个字符串是否为空或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);
}
这也包括控制字符吗?@thumbmunkeys:查看上面链接的两个msdn页面的备注部分,看看包含哪些字符。@PaulZahra:不,控制字符或空格不是字母或数字。不,1.000000000 E100
如果选中s.All(Char.IsDigit),将返回false
。但这取决于OP对此类字符串是否为有效数字的要求。您可以使用long.TryParse
,而不是前面提到的。@TimSchmelter确实如此,这就是为什么我删除了您文章中的观点,并将其贴在OP上。@PaulZahra:我已经编辑了我的答案,以提供一种方法,允许使用甚至是指数符号的notation.q是字符串列表而不是字符串;)@ArsenMkrt:不,它不是。变量quantity
保存字符串列表。变量q
在循环中用于引用列表中的每个字符串。@ArsenMkrt当您使用Linq对其进行迭代时,它将成为一个字符集合。该代码工作得非常完美。如果您是指从循环,而不是我宁愿检查q.Any(Char.isleter),如果第一个符号是letter@ArsenMkrt:这将只检查字母,但像“/&·%/&%”这样的字符串
不包含字母,但仍然无法将其解析为数字。此外,如果任何字符串失败,性能并不重要,因为这将导致重定向,在正常情况下,所有字符串都通过了,您必须遍历所有字符串中的所有字符,因此没有提前退出。说1.000000000E100 i是否正确s有效还是无效?虽然是有效数字,但它也包含一个字母。为什么不使用列表
?
public class YourModel {
public IList<QuantityModel> Quantities { get; set; }
}
public class QuantityModel {
[RegularExpression(@"\d+")] // <--- this
public int Amount { get; set; }
}
// 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);
}