c#验证字符串是否只包含字母

Verifying that a string contains only letters in C#

我有一个输入字符串,我想验证它是否包含:

  • 只有字母或
  • 只有字母和数字或
  • 只有字母、数字或下划线

为了澄清,我在代码中有3个不同的案例,每个案例都需要不同的验证。用C语言实现这一点最简单的方法是什么?


只有字母:

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

只有字母和数字:

1
Regex.IsMatch(input, @"^[a-zA-Z0-9]+$");

仅字母、数字和下划线:

1
Regex.IsMatch(input, @"^[a-zA-Z0-9_]+$");


1
2
3
4
5
bool result = input.All(Char.IsLetter);

bool result = input.All(Char.IsLetterOrDigit);

bool result = input.All(c=>Char.IsLetterOrDigit(c) || c=='_');


只限信件:

1
Regex.IsMatch(theString, @"^[\p{L}]+$");

字母和数字:

1
Regex.IsMatch(theString, @"^[\p{L}\p{N}]+$");

字母、数字和下划线:

1
Regex.IsMatch(theString, @"^[\w]+$");

注意,这些模式还匹配国际字符(与使用a-z构造相反)。


对于那些不愿意使用regex并使用.NET 2.0框架(又称no linq)的用户:

只有字母:

1
2
3
4
5
6
7
8
9
public static bool IsAllLetters(string s)
{
    foreach (char c in s)
    {
        if (!Char.IsLetter(c))
            return false;
    }
    return true;
}

只有数字:

1
2
3
4
5
6
7
8
9
    public static bool IsAllDigits(string s)
    {
        foreach (char c in s)
        {
            if (!Char.IsDigit(c))
                return false;
        }
        return true;
    }

只有数字或字母:

1
2
3
4
5
6
7
8
9
    public static bool IsAllLettersOrDigits(string s)
    {
        foreach (char c in s)
        {
            if (!Char.IsLetterOrDigit(c))
                return false;
        }
        return true;
    }

只有数字、字母或下划线:

1
2
3
4
5
6
7
8
9
    public static bool IsAllLettersOrDigitsOrUnderscores(string s)
    {
        foreach (char c in s)
        {
            if (!Char.IsLetterOrDigit(c) && c != '_')
                return false;
        }
        return true;
    }

我认为使用正则表达式是一个很好的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public bool IsAlpha(string input)
{
    return Regex.IsMatch(input,"^[a-zA-Z]+$");
}

public bool IsAlphaNumeric(string input)
{
    return Regex.IsMatch(input,"^[a-zA-Z0-9]+$");
}

public bool IsAlphaNumericWithUnderscore(string input)
{
    return Regex.IsMatch(input,"^[a-zA-Z0-9_]+$");
}


您可以循环字符串的字符,并使用char方法isletter进行检查。但您也可以使用string方法indexofany来搜索其他不在字符串中的字符。


如果你是一个新手,那么你可以从我的代码中引用。我做的是开支票,这样我只能得到字母和空格!可以在第二个if语句之后重复for循环,以再次验证字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
       bool check = false;

       Console.WriteLine("Please Enter the Name");
       name=Console.ReadLine();

       for (int i = 0; i < name.Length; i++)
       {
           if (name[i]>='a' && name[i]<='z' || name[i]==' ')
           {
               check = true;
           }
           else
           {
               check = false;
           }

       }

       if (check==false)
       {
           Console.WriteLine("Enter Valid Value");
           name = Console.ReadLine();
       }

迭代字符串字符并使用名为"isletter"和"isdigit"的"char"函数。

如果您需要更具体的东西-使用regex类。


最近,我在这个页面的帮助下对检查字符串中字母的函数进行了性能改进。

我发现使用regex的解决方案比使用char.isletterdigit检查的解决方案慢30倍。

我们不确定这些字母或数字是否包含,而且我们只需要拉丁字符,因此基于char.isletterdigit函数的反编译版本实现了我们的函数。

以下是我们的解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
internal static bool CheckAllowedChars(char uc)
    {
        switch (uc)
        {
            case '-':
            case '.':
            case 'A':
            case 'B':
            case 'C':
            case 'D':
            case 'E':
            case 'F':
            case 'G':
            case 'H':
            case 'I':
            case 'J':
            case 'K':
            case 'L':
            case 'M':
            case 'N':
            case 'O':
            case 'P':
            case 'Q':
            case 'R':
            case 'S':
            case 'T':
            case 'U':
            case 'V':
            case 'W':
            case 'X':
            case 'Y':
            case 'Z':
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                return true;
            default:
                return false;
        }
    }

用法如下:

1
2
 if( logicalId.All(c => CheckAllowedChars(c)))
 { // Do your stuff here.. }