【问题标题】:How to make the text case insensitive?如何使文本不区分大小写?
【发布时间】:2014-02-20 06:04:38
【问题描述】:

请建议我一种使文本不区分大小写的方法。无论用户使用哪种情况,都需要比较文本框输入

示例

if (textBox1.Text == "Name")
{
   label1.Content = "This is" + textBox1.Text;
}

如果textBox1输入的是Name/NAME/name,标签应该显示对应的值。

【问题讨论】:

  • 使用String.ToUpper()
  • 不要使用 String.ToUpper()。请改用适当的 Equals 方法。
  • @DasKrümelmonster 为什么?是什么原因?
  • 首先,你要表达平等。没有什么比 .Equals() 做得更好了。 == 可能,但不是当您将一个参数转换为大写时。其次,你一开始只写了.ToUpper()。这忽略了文化,以后可能会导致语言问题。如果我的文化将大写“m”定义为“ᴍ”并使“M”成为不同的字母怎么办?

标签: c#


【解决方案1】:

我认为您正在寻找 StringComparer.CurrentCultureIgnoreCase

if(string.Equals(textBox1.Text, "Name", StringComparer.CurrentCultureIgnoreCase))

你也可以试试看

System.Collections.CaseInsensitiveComparer

【讨论】:

  • 感谢大家的及时回复,但我似乎遗漏了一些东西,因为当我尝试执行您的说明时,它显示错误:“名称 'StringComparision' 在当前上下文中不存在” .请多多指教!
  • 确保您的文件顶部有 using System; 声明,尽管您不会的原因令人怀疑。
  • 是的,我尝试了您的建议,但仍然返回相同的错误
  • @user3172531:- 虽然我不确定为什么它不适合你,因为它在我身边看起来不错。无论如何,您也可以这样尝试:- string.CompareInfo.IndexOf(textBox1.Text, "Name", CompareOptions.IgnoreCase)
  • 那也行不通!无论如何,非常感谢您的努力!
【解决方案2】:

在比较字符串时,您确实想使用.Equals 方法

textBox1.Text.Equals("Name", StringComparison.CurrentCultureIgnoreCase);

第二个参数允许您指定StringComparison。在此示例中,它告诉它忽略大小写

【讨论】:

    【解决方案3】:

    请您尝试以下方法:

       if(textBox1.text.Equals("value",StringComparison.InvariantCultureIgnoreCase))
    

    希望对你有帮助

    【讨论】:

    • 感谢大家的及时回复,但我似乎遗漏了一些东西,因为当我尝试执行您的说明时,它显示错误:“名称 'StringComparision' 在当前上下文中不存在” .请多多指教!
    • 解决项目未显示在菜单中。我已经声明使用 System;声明以及 System.Text;和 System.Text.RegularExpressions;
    • @user3172531...转到对象浏览器,在 mscorlib 中,检查您是否有 StringComparer 类..
    • 您的建议有效!昨天我尝试这个时会出现其他问题。谢谢,祝你有美好的一天!
    • 谢谢!按照建议更改了我的用户名!
    【解决方案4】:

    试试这个:

    if(textBox1.Text.Equals("Name",StringComparision.InvariantCultureIgnoreCase))
    {
      label1.Content = "This is" + textBox1.Text;
    }
    

    【讨论】:

      【解决方案5】:

      您只需使用ToUpperToUpperInvariant

      if (textBox1.Text.ToUpper() == "NAME")
      

      如果您需要使用不变文化的大小写规则来大写

      if (textBox1.Text.ToUpperInvariant() == "NAME")
      

      【讨论】:

        【解决方案6】:

        试试这样的

        if (textBox1.Text.ToLowerInvariant() == "Name".ToLowerInvariant())
             label1.Content = "This is" + textBox1.Text;
        

        【讨论】:

        • 嗨,我按照建议尝试了,但没有提供所需的输出。
        • 输出是什么? :P
        【解决方案7】:

        您可以实例化一个比较器并在整个代码中重用它。

        这个 Insensitive 类提供了一套完整的不敏感比较方法:

        public static class Insensitive
        {
            private static IComparer m_Comparer = CaseInsensitiveComparer.Default;
        
            public static IComparer Comparer
            {
                get{ return m_Comparer; }
            }
        
            public static int Compare( string a, string b )
            {
                return m_Comparer.Compare( a, b );
            }
        
            public static bool Equals( string a, string b )
            {
                if ( a == null && b == null )
                    return true;
                else if ( a == null || b == null || a.Length != b.Length )
                    return false;
        
                return ( m_Comparer.Compare( a, b ) == 0 );
            }
        
            public static bool StartsWith( string a, string b )
            {
                if ( a == null || b == null || a.Length < b.Length )
                    return false;
        
                return ( m_Comparer.Compare( a.Substring( 0, b.Length ), b ) == 0 );
            }
        
            public static bool EndsWith( string a, string b )
            {
                if ( a == null || b == null || a.Length < b.Length )
                    return false;
        
                return ( m_Comparer.Compare( a.Substring( a.Length - b.Length ), b ) == 0 );
            }
        
            public static bool Contains( string a, string b )
            {
                if ( a == null || b == null || a.Length < b.Length )
                    return false;
        
                a = a.ToLower();
                b = b.ToLower();
        
                return ( a.IndexOf( b ) >= 0 );
            }
        }
        

        来源:https://github.com/runuo/runuo/blob/master/Server/Insensitive.cs

        【讨论】:

        • 请选择内联内容而不是仅链接的答案。
        • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
        • 感谢您的反馈。有空我会修改答案。
        猜你喜欢
        • 1970-01-01
        • 2011-10-14
        • 1970-01-01
        • 2013-03-06
        • 2012-05-25
        • 2020-11-24
        • 2021-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多