我在GUI上有一个文本框,它带有一个"手机号码"作为输入。我想验证它是否有一些字符,这意味着数字无效
因此,数字9876543210 有效,而数字98765df013是 的无效
我制作了一系列所有角色(我不允许这样做)
string[] alphabeticChars = new string[] {
"a", "b", "c", "d", "e", "f", "g",
"h", "i", "j", "k", "l", "m", "n",
"o", "p", "q", "r", "s", "t", "u",
"v", "w", "x", "y", "z"
};
然后我写了一个验证函数
public bool HasCharacters(string text)
{
foreach(string character in this.alphabeticChars)
if(text.Contains(character.ToLower()) || text.Contains(character.ToUpper()))
return true;
return false;
}
正如你所看到的,我需要两次调用Contains,一个用于"小写"和#34;大写"的另一个时间。我检查过,无法找到ContainsIgnoreCase或其他东西。
这种事情的最佳方法是什么?(不要提及正则表达式,因为我不想使用它们)
答案 0 :(得分:5)
以一种非常简单的方式: - )
foreach(string character in this.alphabeticChars)
if(text.ToLower().Contains(character))
return true;
或许你可以做一个效率更高的正则表达式
答案 1 :(得分:2)
我的回答并不是你要求的,更多的建议,验证电话号码的更好方法是使用libphonenumber(c#)库https://libphonenumber.codeplex.com,这是Google libphonenumber的端口。我发现这是为我做这件事的最佳方式。您可以根据国家/地区代码验证数字,并在输出中对其进行格式化。
更新。 这是库https://www.nuget.org/packages/libphonenumber-csharp/
的更新版本答案 2 :(得分:1)
试试这个:
bool isValid = !text.Any(c => Char.IsLetter(c));
答案 3 :(得分:1)
我的看法,使用Linq:
public static class StringExtensions
{
public static bool ContainsOnlyDigits(this string s)
{
return s.All(c => c >= '0' && c <= '9');
}
}
并在使用中:
var result = "12345678".ContainsOnlyDigits();
答案 4 :(得分:1)
由于您似乎想要测试数字(因为您的预期输入是&#34;移动电话号码&#34;,它可以是一个单行:
bool isValid = text.All(Char.IsDigit);
答案 5 :(得分:1)
不是检查字符的存在,而是切换逻辑,只是验证一切都是数字:
public bool IsNumeric(string text)
{
return text.All(char.IsDigit);
}