检查字符串是否包含忽略大小写的字符

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/