Programming

영숫자 및 밑줄에 대한 정규식

procodes 2020. 2. 10. 22:29
반응형

영숫자 및 밑줄에 대한 정규식


문자열에 대문자, 소문자, 숫자 및 밑줄 만 포함되어 있는지 확인하는 정규식을 원합니다.


해당 문자 포함 된 문자열 (또는 빈 문자열) 을 일치 시키려면

"^[a-zA-Z0-9_]*$"

이것은 .NET 정규 표현식 및 다른 많은 언어에서도 작동합니다.

세분화 :

^ : start of string
[ : beginning of character group
a-z : any lowercase letter
A-Z : any uppercase letter
0-9 : any digit
_ : underscore
] : end of character group
* : zero or more of the given characters
$ : end of string

빈 문자열을 허용하지 않으려면 * 대신 +를 사용하십시오.

편집 다른 사람들이 지적했듯이 일부 정규 표현식 언어는의 약어입니다 [a-zA-Z0-9_]. .NET 정규식 언어에서 ECMAScript 동작을 켜고 \w속기 (수확 ^\w*$또는 ^\w+$)로 사용할 수 있습니다. 다른 언어 및 기본적으로 .NET에서는 \w다소 넓으며 다른 종류의 유니 코드 문자와도 일치합니다 (이 점을 지적한 Jan 덕분). 따라서 해당 문자 일치 시키려면 명시 적 (더 긴) 형식을 사용하는 것이 가장 좋습니다.


여기에 많은 자세한 내용이 있으며, 나는 그것에 대해 깊이 반대하고 있으므로 내 결정적인 대답은 다음과 같습니다.

/^\w+$/

\w[A-Za-z0-9_]원하는 것과 거의 같습니다 . (믹스에 유니 코드를 도입하지 않는 한)

+수량자를 사용하면 하나 이상의 문자와 일치합니다. 빈 문자열도 허용하려면 *대신 사용하십시오.


각 캐릭터가 요구 사항과 일치하는지 확인하고 싶기 때문에 다음을 사용합니다.

[A-Za-z0-9_]

속기 버전을 사용할 수도 있습니다.

\w

어느 것이 동등한 지 (일부 정규식 풍미에서는 사용하기 전에 확인하십시오). 그런 다음 전체 문자열이 일치해야 함을 나타내려면 다음을 사용하십시오.

^

문자열이 해당 문자로 시작해야 함을 나타내려면

$

문자열을 나타내려면 해당 문자로 끝나야합니다. 그런 다음 사용

\w+ or \w*

"1 이상"또는 "0 이상"을 나타냅니다. 모든 것을 종합하면 다음과 같은 이점이 있습니다.

^\w*$

음 ... 질문 : 캐릭터가 하나 이상 있어야합니까? 빈 문자열 일 수 있습니까?

^[A-Za-z0-9_]+$

적어도 하나의 대문자 또는 소문자 영숫자 또는 밑줄을 수행합니다. 길이가 0이 아닌 경우 +를 *로 대체하십시오.

^[A-Za-z0-9_]*$

편집하다:

분음 부호를 포함해야하는 경우 (예 : cedilla-ç) 위와 동일하지만 분음 부호 문자를 포함하는 단어 문자를 사용해야합니다.

^\w+$

또는

^\w*$

보다 장황하지만 \wPOSIX 문자 클래스 이름 ( http://www.zytrax.com/tech/web/regex.htm#special ) 의 가독성을 개인적으로 높이 평가합니다 .

^[[:alnum:]_]+$

그러나 위 링크의 문서에는 \w"0-9, A-Z 및 a-z 범위의 모든 문자와 일치 (POSIX [: alnum :]과 동일)"라는 내용이 있지만 사실은 아닙니다. . grep -P어쨌든 아닙니다 . 사용하는 경우 밑줄을 명시 적으로 포함해야 [:alnum:]하지만 사용하는 경우에는 포함 하지 않아야합니다 \w. 짧고 달콤한 것에 대해 다음을 이길 수 없습니다.

^\w+$

가독성과 함께 POSIX 문자 클래스 ( http://www.regular-expressions.info/posixbrackets.html )를 사용하면 정규 표현식이 ASCII가 아닌 문자열에서 작동 할 수 있으며, 범위 기반 정규 표현식은 의존하지 않으므로 범위 기반 정규 표현식이 작동하지 않습니다. ASCII 문자의 기본 순서는 다른 문자 집합과 다를 수 있으므로 캡처하려는 ASCII가 아닌 문자 (예 : –)를 제외합니다.


Computer Science에서 영숫자 값은 종종 첫 번째 문자가 숫자가 아니라 알파벳 또는 밑줄임을 의미합니다. 그 후, 문자가 될 수있다 0-9, A-Z, a-z, 또는 밑줄 ( _).

그 방법은 다음과 같습니다.

PHP에서 테스트 :

$regex = '/^[A-Za-z_][A-Za-z\d_]*$/'

또는 이것을 가지고

^[A-Za-z_][A-Za-z\d_]*$

개발 언어로 배치하십시오.


어때요?

^([A-Za-z]|[0-9]|_)+$

... 명시 적이거나 다음과 같은 경우 :

^\w+$

... 간결한 것을 선호하는 경우 (Perl 구문).


lookaheads를 사용하여 "적어도 하나"를 수행하십시오. 훨씬 쉬워요.

다음은 하나 이상의 숫자와 하나의 문자를 포함하는 1-10 개의 문자가 필요한 예입니다.

^(?=.*\d)(?=.*[A-Za-z])[A-Za-z0-9]{1,10}$

참고 : \ w를 사용할 수 있었지만 ECW / 유니 코드 고려 사항은 \ w "워드 문자"의 문자 범위를 증가시킵니다.


문자열에 대해 만든 다국어 확장을 시도하십시오.

IsAlphaNumeric-문자열에는 적어도 1 개의 알파 (charSet에 지정된 유니 코드 범위의 문자)와 적어도 1 개의 숫자 (numSet에 지정된)가 포함되어야합니다. 또한 문자열은 알파와 숫자로만 구성되어야합니다.

IsAlpha-문자열은 최소한 1 개의 알파 (특정 언어 charSet)를 포함해야하며 알파로 만 구성되어야합니다.

IsNumeric-문자열은 최소한 1 개의 숫자 (지정된 언어 numSet)를 포함해야하며 숫자로만 구성되어야합니다.

원하는 언어에 대한 charSet / numSet 범위를 지정할 수 있습니다. 유니 코드 범위는 아래 링크에서 제공됩니다.

http://www.ssec.wisc.edu/~tomw/java/unicode.html

API :

    public static bool IsAlphaNumeric(this string stringToTest)
    {
        //English
        const string charSet = "a-zA-Z";
        const string numSet = @"0-9";

        //Greek
        //const string charSet = @"\u0388-\u03EF";            
        //const string numSet = @"0-9";

        //Bengali
        //const string charSet = @"\u0985-\u09E3";
        //const string numSet = @"\u09E6-\u09EF";

        //Hindi
        //const string charSet = @"\u0905-\u0963";
        //const string numSet = @"\u0966-\u096F";

        return Regex.Match(stringToTest, @"^(?=[" + numSet + @"]*?[" + charSet + @"]+)(?=[" + charSet + @"]*?[" + numSet + @"]+)[" + charSet + numSet +@"]+$").Success;
    }

    public static bool IsNumeric(this string stringToTest)
    {
        //English
        const string numSet = @"0-9";

        //Hindi
        //const string numSet = @"\u0966-\u096F";

        return Regex.Match(stringToTest, @"^[" + numSet + @"]+$").Success;
    }

    public static bool IsAlpha(this string stringToTest)
    {
        //English
        const string charSet = "a-zA-Z";

        return Regex.Match(stringToTest, @"^[" + charSet + @"]+$").Success;
    }

사용법 :

        //English
        string test = "AASD121asf";

        //Greek
        //string test = "Ϡϛβ123";

        //Bengali
        //string test = "শর৩৮";

        //Hindi
        //string test = @"क़लम३७ख़";

        bool isAlphaNum = test.IsAlphaNumeric();

다음 정규식은 영숫자 및 밑줄과 일치합니다.

^[a-zA-Z0-9_]+$

예를 들어, Perl에서 :

#!/usr/bin/perl -w

my $arg1 = $ARGV[0];

# check that the string contains *only* one or more alphanumeric chars or underscores
if ($arg1 !~ /^[a-zA-Z0-9_]+$/) {
  print "Failed.\n";
} else {
    print "Success.\n";
}

나에게 알파, 숫자 및 알파벳 숫자를 구별하고 싶은 문제가있어서 영숫자 문자열에 적어도 하나의 알파와 적어도 하나의 숫자가 포함되도록하려면 다음을 사용했습니다.

^([a-zA-Z_]{1,}\d{1,})+|(\d{1,}[a-zA-Z_]{1,})+$

유니 코드 영숫자 일치를 찾는 사람들에게는 다음과 같은 작업을 원할 수 있습니다.

^[\p{L} \p{Nd}_]+$

http://unicode.org/reports/tr18/http://www.regular-expressions.info/unicode.html 에서 추가로 읽으십시오 .


나는 당신이 당신의 성냥에서 라틴어와 유니 코드 문자를 사용하지 않는다고 생각합니다. 예를 들어 "ã"또는 "ü"문자를 사용해야하는 경우 "\ w"를 사용할 수 없습니다.

또는이 방법을 사용할 수 있습니다.

^[A-ZÀ-Ýa-zà-ý0-9_]+$

그것이 도움이되기를 바랍니다!


다음은 수량자를 사용하여 1 자 이상 255 자 이하로 지정하려는 정규식입니다.

[^a-zA-Z0-9 _]{1,255}

전체 문자열을 확인하고 빈 문자열을 허용하지 않으려면

^[A-Za-z0-9_]+$

이것은 나를 위해 작동합니다.

[\\p{Alnum}_]

^\w*$ 아래 조합에서 작동합니다

1
123
1av
pRo
av1

참고 URL : https://stackoverflow.com/questions/336210/regular-expression-for-alphanumeric-and-underscores



반응형