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

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



답변

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

"^[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 구문).