检查字符串是否包含忽略大小写的字符
Check if a string contains a character ignoring case
我在 GUI 上有一个文本框,它接受 "Mobile Number" 作为输入。我想验证它,看看它是否有一些字符,这意味着该数字无效
So, a number 9876543210 is valid while a number 98765df013 is
invalid
我做了一个所有字符的数组(这是我不允许的)
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 两次,一次用于 "Lower Case",另一次用于 "Upper Case"。我查了一下,找不到 ContainsIgnoreCase 之类的东西。
处理这种事情的最佳方法是什么?(不要提及正则表达式,因为我不想使用它们)
以一种非常简单的方式:-)
foreach(string character in this.alphabeticChars)
if(text.ToLower().Contains(character))
return true;
或者你可以做一个更高效的正则表达式
试试这个:
bool isValid = !text.Any(c => Char.IsLetter(c));
我的看法,使用 Linq:
public static class StringExtensions
{
public static bool ContainsOnlyDigits(this string s)
{
return s.All(c => c >= '0' && c <= '9');
}
}
并在使用中:
var result = "12345678".ContainsOnlyDigits();
由于您似乎想要测试数字(因为您的预期输入是 "mobile number",它可以是一行:
bool isValid = text.All(Char.IsDigit);
不是检查字符的存在,而是切换逻辑并验证所有内容都是数字:
public bool IsNumeric(string text)
{
return text.All(char.IsDigit);
}
我的回答不完全是你要问的,它更多的建议,验证 phone 数字的更好方法是使用 libphonenumber (c#) 库 https://libphonenumber.codeplex.com是 Google libphonenumber 的端口。我发现这是为我做这件事的最好方法。您可以根据国家代码验证数字并在输出中格式化它们。
更新。
这是库的最新版本 https://www.nuget.org/packages/libphonenumber-csharp/
我在 GUI 上有一个文本框,它接受 "Mobile Number" 作为输入。我想验证它,看看它是否有一些字符,这意味着该数字无效
So, a number 9876543210 is valid while a number 98765df013 is invalid
我做了一个所有字符的数组(这是我不允许的)
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 两次,一次用于 "Lower Case",另一次用于 "Upper Case"。我查了一下,找不到 ContainsIgnoreCase 之类的东西。
处理这种事情的最佳方法是什么?(不要提及正则表达式,因为我不想使用它们)
以一种非常简单的方式:-)
foreach(string character in this.alphabeticChars)
if(text.ToLower().Contains(character))
return true;
或者你可以做一个更高效的正则表达式
试试这个:
bool isValid = !text.Any(c => Char.IsLetter(c));
我的看法,使用 Linq:
public static class StringExtensions
{
public static bool ContainsOnlyDigits(this string s)
{
return s.All(c => c >= '0' && c <= '9');
}
}
并在使用中:
var result = "12345678".ContainsOnlyDigits();
由于您似乎想要测试数字(因为您的预期输入是 "mobile number",它可以是一行:
bool isValid = text.All(Char.IsDigit);
不是检查字符的存在,而是切换逻辑并验证所有内容都是数字:
public bool IsNumeric(string text)
{
return text.All(char.IsDigit);
}
我的回答不完全是你要问的,它更多的建议,验证 phone 数字的更好方法是使用 libphonenumber (c#) 库 https://libphonenumber.codeplex.com是 Google libphonenumber 的端口。我发现这是为我做这件事的最好方法。您可以根据国家代码验证数字并在输出中格式化它们。
更新。 这是库的最新版本 https://www.nuget.org/packages/libphonenumber-csharp/