문자열에 C #의 문자 만 포함되어 있는지 확인


187

입력 문자열이 있고 다음이 포함되어 있는지 확인하고 싶습니다.

  • 글자 만
  • 문자와 숫자 만
  • 문자, 숫자 또는 밑줄 만

명확히하기 위해 코드에 3 가지 사례가 있으며 각각 다른 검증을 요구합니다. C #에서 이것을 달성하는 가장 간단한 방법은 무엇입니까?

답변:


292

글자 만 :

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

문자와 숫자 만 :

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

문자, 숫자 및 밑줄 만 :

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

31
이것은 Char.IsLetter가 비 라틴 알파벳을 허용하는 라틴 알파벳을 가정합니다.
Paul van Brenk

5
Regex.IsMatch (입력, "^ [a-z0-9] + $", RegexOptions.IgnoreCase);
Tom Fobear

4
@TomFobear :이 명시 적으로 [A-ZA-Z]를 지정하여보다 느린
필립 Leybaert

25
한 번 더 검색하여 나와 같은 사람들을 구하기 위해 Regex는 System.Text.RegularExpressions 네임 스페이스에 있습니다
Eric Barr

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

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

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

5
어느 것이 당신보다 빠른지 (LINQ) 또는 필립 레이 바트 (Regex)의 것이 더 궁금하십니까?

4
@nam CMU 발음 사전 (모든 문자 만, 평균 길이 7.4 자)에 대해 테스트를 실행하면 모든 문자에 Regex대해 컴파일 된 것보다 1.8 배 빠르며 옵션 (!)이있는 Regex모든 문자에 대해 컴파일 된 것보다 3 배 빠릅니다 IgnoreCase.
NetMage

수락 된 답변은 컴파일되지 않은 정규 표현식을 사용하므로 속도가 느려집니다. LINQ 솔루션을 선호합니다. 게시 해 주셔서 감사합니다. :)
Berend Engelbrecht

48

문자 만 :

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

문자와 숫자 :

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

문자, 숫자 및 밑줄 :

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

이러한 패턴은 국제 문자와도 일치합니다 ( a-z구문 사용과 반대 ).


19

Regex를 사용하지 않고 .NET 2.0 프레임 워크 (일명 LINQ)를 사용하는 사람들을 위해 :

편지 만 :

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

숫자 만 :

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

숫자 또는 문자 만 :

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

숫자 나 문자 또는 밑줄 만 :

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

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_]+$");
}

2
정규식에는 정적 메소드가 있습니다.
Philippe Leybaert

4

문자열의 문자를 반복하고 Char 메서드 IsLetter를 사용하여 확인할 수 있지만 String 메서드 IndexOfAny 를 사용하여 문자열 에없는 다른 문자를 검색 하는 트릭을 수행 할 수도 있습니다.


1

문자열 문자를 반복하고 'IsLetter'및 'IsDigit'이라는 'Char'기능을 사용하십시오.

더 구체적인 것이 필요하면 Regex 클래스를 사용하십시오.


1

당신이 초보자라면 내 코드에서 참조 할 수 있습니다 .. 내가 한 것은 알파벳과 공백 만 얻을 수 있도록 체크를하는 것입니다! 두 번째 if 문 다음에 for 루프를 반복하여 문자열의 유효성을 다시 검사 할 수 있습니다

       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;
               break;
           }

       }

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

0

최근 에이 페이지의 도움으로 문자열의 문자를 확인하는 기능의 성능이 향상되었습니다.

정규식이있는 솔루션이 Char.IsLetterOrDigit 검사가있는 솔루션보다 30 배 느리다는 것을 알았습니다.

문자 나 숫자가 포함되어 있는지 확신 할 수 없었고 라틴 문자 만 필요했기 때문에 디 컴파일 된 Char.IsLetterOrDigit 함수 버전을 기반으로 함수를 구현했습니다.

우리의 해결책은 다음과 같습니다.

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;
        }
    }

사용법은 다음과 같습니다.

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

0

문자가 문자, 숫자 또는 공백인지 확인하는 방법을 찾으십시오. 그렇지 않으면 밑줄을 첨부하십시오 (필요에 따라 자유롭게 수정하십시오)

public String CleanStringToLettersNumbers(String data)
{
    var result = String.Empty;

    foreach (var item in data)
    {
        var c = '_';

        if ((int)item >= 97 && (int)item <= 122 ||
            (int)item >= 65 && (int)item <= 90 ||
            (int)item >= 48 && (int)item <= 57 ||
            (int)item == 32)
        {
            c = item;
        }

        result = result + c;
    }

    return result;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.