【问题标题】:Check if a string contains a character ignoring case检查字符串是否包含忽略大小写的字符
【发布时间】:2015-07-18 21:33:32
【问题描述】:

我在 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 两次,一次用于“小写”,另一次用于“大写”。我查了一下,找不到 ContainsIgnoreCase 什么的。

最好的方法是什么?(不要提及正则表达式,因为我不想使用它们)

【问题讨论】:

  • 我想我会问:这里的正则表达式有什么问题?
  • @jdphenix 可能是因为每个人都盲目地遵循这个:blog.codinghorror.com/…(没有完全阅读)
  • @jdphenix 没什么特别的,只是想自己做..正则表达式总是可以很方便的..所以,首先我想自己探索
  • 您应该在您的实际要求中编辑您的问题。

标签: c# string contains


【解决方案1】:

我的回答并不完全符合您的要求,更多建议,验证电话号码的更好方法是使用 libphonenumber (c#) 库 https://libphonenumber.codeplex.com,即 Google libphonenumber 的端口。我发现它是为我做这件事的最佳方式。您可以根据国家/地区代码验证数字并在输出中对其进行格式化。

更新。 这是库的更多最新版本https://www.nuget.org/packages/libphonenumber-csharp/

【讨论】:

  • 很好的建议。考虑到上次活动似乎是 2013 年 9 月 9 日星期一,这有多最新
  • @BrendanGreen 你也可以在 nuget 上找到它nuget.org/packages/libphonenumber-csharp 还有更多最新版本。
【解决方案2】:

不要检查字符的存在,而是切换逻辑并验证所有内容都是数字:

public bool IsNumeric(string text)
{
    return text.All(char.IsDigit);
}

【讨论】:

    【解决方案3】:

    由于您似乎想要测试数字(因为您的预期输入是“手机号码”,它可以是单行:

    bool isValid = text.All(Char.IsDigit);
    

    【讨论】:

    • 嗯,这是一个好方法,但明天可能需要包含特殊字符,如 -+,在这种情况下,+91-9712712345 将是一个有效的结果。在这种情况下可以做什么
    • 我会放弃不使用正则表达式的要求并使用它。
    【解决方案4】:

    我的看法,使用 Linq:

    public static class StringExtensions
    {
        public static bool ContainsOnlyDigits(this string s)
        {
            return s.All(c => c >= '0' && c <= '9');
        }
    }
    

    并在使用中:

    var result = "12345678".ContainsOnlyDigits();
    

    【讨论】:

    • 可能是s.All(Char.IsDigit) ;)
    【解决方案5】:

    试试这个:

    bool isValid = !text.Any(c => Char.IsLetter(c));
    

    【讨论】:

      【解决方案6】:

      以非常简单的方式:-)

      foreach(string character in this.alphabeticChars)
           if(text.ToLower().Contains(character)) 
                  return true;
      

      或者你可以做一个更有效的正则表达式

      【讨论】:

      • 太棒了!为什么我没有想到它......谢谢!
      • 我看到了你的编辑,你不需要将你的角色转换为更低的。您可以控制字符列表,并且可以小心使用小写字母。
      猜你喜欢
      • 2011-01-17
      • 2020-11-05
      • 2020-06-13
      • 2012-12-10
      • 2011-03-31
      • 1970-01-01
      • 2016-11-11
      • 2016-03-01
      • 1970-01-01
      相关资源
      最近更新 更多