如何检查一个字符串中是否包含从a到z的任何一个字母?

67

可能是重复问题:
C#正则表达式:检查“a-z”和“A-Z”

我可以使用下面的代码:

String hello = "Hello1";
Char[] convertedString = String.ToCharArray();
int errorCounter = 0;
for (int i = 0; i < CreateAccountPage_PasswordBox_Password.Password.Length; i++) {
    if (convertedString[i].Equals('a') || convertedString[i].Equals('A') .....
                            || convertedString[i].Equals('z') || convertedString[i].Equals('Z')) {
        errorCounter++;
    }
}
if(errorCounter > 0) {
    //do something
}

但我认为仅仅为了一个简单的目的而使用这么多行代码太过复杂,我相信有一种更加简单的方法,只是我还没有掌握它。


3
请查看https://dev59.com/CW025IYBdhLWcg3wbVWn - 正则表达式正是您要寻找的东西。 - dash
2
我投票重新开放这个问题,因为它并不严格涉及正则表达式。 - Omar
1
我认为这不是重复的问题。至少不是与“C# Regex: Checking for “a-z” and “A-Z””重复,因为这个问题询问一个字符串是否包含任何字符a-zA-Z,而另一个问题则询问该字符串是否仅由a-zA-Z组成... - LDW
6个回答

114

关于:

//true if it doesn't contain letters
bool result = hello.Any(x => !char.IsLetter(x));

15
注意:此代码检查字符串中是否存在非字母字符,而不是检查字符串中是否含有字母。 简单修复方法: bool result = !hello.Any(x => char.IsLetter(x)); - Qwerty01
9
我很高兴这里有一个LINQ的答案,这样我就不需要使用正则表达式了。 - Taylor K.
2
!hello.Any(char.IsLetter); 也应该可以工作吧? - user3638471
1
如果字符串中有换行符"\r"或"\n",则返回true。 - Dman
1
对我来说非常好用! - Kbdavis07
显示剩余2条评论

85

将你的 for loop 替换为以下内容:

errorCounter = Regex.Matches(yourstring,@"[a-zA-Z]").Count;

记得在导入时使用using System.Text.RegularExpressions;,才能使用Regex类。


哦,不好意思,我还有一个问题,如何检测不仅是从a到z的字母,还包括所有符号?比如 . , ! ? < > # $ - Hendra Anggrian
如果你需要处理非a-z字母(中文等),请小心使用这个正则表达式。 - Simon Bourdeau

27

你可以使用正则表达式:

Regex.IsMatch(hello, @"^[a-zA-Z]+$");

如果您不喜欢那样做,可以使用LINQ:

hello.All(Char.IsLetter);

或者,您可以遍历字符,并使用isAlpha:

Char.IsLetter(character);

抱歉,只有当整个字符串是数字时才能读取,如果我输入数字和字母,它就无法检测到。 - Hendra Anggrian
1
正确的正则表达式应该是:Regex.IsMatch(hello, @"[a-zA-Z]"); - A-y

7

我简直不敢相信你能让它变得如此简单! - Hendra Anggrian
2
可以使用以下正则表达式:(?i)^[a-z]+$,其中 ?i 表示不区分大小写。 - NeverHopeless

4

对于最小化更改:

for(int i=0; i<str.Length; i++ )
   if(str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'A' && str[i] <= 'Z')
      errorCount++;

如果速度不是问题,而且您实际上并不需要确切的计数,那么可以使用正则表达式。


3

使用正则表达式,无需将其转换为字符数组。

if(Regex.IsMatch("yourString",".*?[a-zA-Z].*?"))
{
errorCounter++;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接