验证字符串是否只包含C#中的字母

Bab*_*goo 179 c# string

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

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

为了澄清,我在代码中有3个不同的案例,每个案例都要求进行不同的验证.在C#中实现这一目标的最简单方法是什么?

Phi*_*ert 279

只有字母:

Regex.IsMatch(input, @"^[a-zA-Z]+$");
Run Code Online (Sandbox Code Playgroud)

只有字母和数字:

Regex.IsMatch(input, @"^[a-zA-Z0-9]+$");
Run Code Online (Sandbox Code Playgroud)

只有字母,数字和下划线:

Regex.IsMatch(input, @"^[a-zA-Z0-9_]+$");
Run Code Online (Sandbox Code Playgroud)

  • 这假定为拉丁字母,其中Char.IsLetter允许非拉丁字母. (31认同)
  • 只是为了从另一个搜索中保存像我这样的人,Regex位于System.Text.RegularExpressions命名空间中 (23认同)
  • Regex.IsMatch(输入,"^ [a-z0-9] + $",RegexOptions.IgnoreCase); (5认同)
  • @TomFobear:这比明确指定[a-zA-Z]慢 (4认同)

Muh*_*han 229

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

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

bool result = input.All(c=>Char.IsLetterOrDigit(c) || c=='_');
Run Code Online (Sandbox Code Playgroud)

  • 我很想知道哪一个更快(LINQ)还是Philippe Leybaert(Regex)? (5认同)
  • @nam对CMU语音字典运行测试(仅限所有字母,平均长度为7.4个字符),这比所有字母编译的`Regex`快1.8倍,比使用`IgnoreCase的所有字母编译`正则表达式'快3倍选项 (!). (3认同)
  • 接受的答案使用未编译的正则表达式,这会更慢。我更喜欢 LINQ 解决方案,感谢您发布它:) (2认同)

Fre*_*örk 46

仅限信件:

Regex.IsMatch(theString, @"^[\p{L}]+$");
Run Code Online (Sandbox Code Playgroud)

字母和数字:

Regex.IsMatch(theString, @"^[\p{L}\p{N}]+$");
Run Code Online (Sandbox Code Playgroud)

字母,数字和下划线:

Regex.IsMatch(theString, @"^[\w]+$");
Run Code Online (Sandbox Code Playgroud)

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


ROF*_*IME 19

对于那些不愿意使用Regex并且使用.NET 2.0 Framework(AKA no LINQ)的人:

只有信件:

public static bool IsAllLetters(string s)
{
    foreach (char c in s)
    {
        if (!Char.IsLetter(c))
            return false;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

只有数字:

    public static bool IsAllDigits(string s)
    {
        foreach (char c in s)
        {
            if (!Char.IsDigit(c))
                return false;
        }
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

只有数字或字母:

    public static bool IsAllLettersOrDigits(string s)
    {
        foreach (char c in s)
        {
            if (!Char.IsLetterOrDigit(c))
                return false;
        }
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

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

    public static bool IsAllLettersOrDigitsOrUnderscores(string s)
    {
        foreach (char c in s)
        {
            if (!Char.IsLetterOrDigit(c) && c != '_')
                return false;
        }
        return true;
    }
Run Code Online (Sandbox Code Playgroud)


CMS*_*CMS 8

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

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_]+$");
}
Run Code Online (Sandbox Code Playgroud)

  • Regex有静态方法 (2认同)

Bag*_*get 5

您可以循环字符串的字符并使用 Char 方法IsLetter 进行检查, 但您也可以使用 String 方法IndexOfAny做一个技巧来搜索不应该出现在字符串中的其他字符。