문자열에 대문자, 소문자, 숫자 및 밑줄 만 포함되어 있는지 확인하는 정규식을 갖고 싶습니다.
문자열에 대문자, 소문자, 숫자 및 밑줄 만 포함되어 있는지 확인하는 정규식을 갖고 싶습니다.
답변:
해당 문자 만 포함 된 문자열 (또는 빈 문자열) 을 일치 시키려면
"^[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 덕분). 따라서 해당 문자 만 일치 시키려면 명시 적 (더 긴) 형식을 사용하는 것이 가장 좋습니다.
[\p{upper}\p{lower}\p{gc=Number}_]
결합 문자가 없다고 가정하면이 작업을 올바르게 수행해야합니다.
여기에 많은 상세가 있으며, 나는 그것에 대해 깊이 반대하고 있으므로 내 결정적인 대답은 다음과 같습니다.
/^\w+$/
\w
[A-Za-z0-9_]
원하는 것과 거의 같습니다 . (믹스에 유니 코드를 도입하지 않는 한)
+
수량자를 사용하면 하나 이상의 문자와 일치합니다. 빈 문자열도 허용하려면 *
대신 사용하십시오.
\w
일반적으로 ASCII만으로 제한되지 않습니다.
[a-z]
와 그 변형이 아닌 이것이 정답 입니다. \w
비 라틴 문자도 캡처합니다. 마찬가지로 šēēā
나кукареку
각 캐릭터가 요구 사항과 일치하는지 확인하고 싶기 때문에 다음을 사용합니다.
[A-Za-z0-9_]
그리고 속기 버전을 사용할 수도 있습니다.
\w
어느 것이 동등한 지 (일부 정규식 풍미에서는 사용하기 전에 확인하십시오). 그런 다음 전체 문자열이 일치해야 함을 나타내려면 다음을 사용하십시오.
^
문자열이 해당 문자로 시작해야 함을 나타내려면
$
문자열을 나타내려면 해당 문자로 끝나야합니다. 그런 다음 사용
\w+ or \w*
"1 이상"또는 "0 이상"을 나타냅니다. 모든 것을 종합하면 다음과 같은 이점이 있습니다.
^\w*$
음 ... 질문 : 캐릭터가 하나 이상 있어야합니까? 빈 문자열 일 수 있습니까?
^[A-Za-z0-9_]+$
하나 이상의 대문자 또는 소문자 영숫자 또는 밑줄을 수행합니다. 길이가 0이 아닌 경우 +를 *로 대체하십시오.
^[A-Za-z0-9_]*$
편집하다:
분음 부호를 포함해야하는 경우 (예 : cedilla-ç) 위와 동일하지만 분음 부호 문자를 포함하는 단어 문자를 사용해야합니다.
^\w+$
또는
^\w*$
보다 장황하지만 \w
POSIX 문자 클래스 이름 ( 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가 아닌 문자 (예 : –)를 제외합니다.
문자열에 대해 만든 다국어 확장을 시도하십시오.
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";
}
이것은 대부분의 경우에 효과가 있습니다.
/^[\d]*[a-z_][a-z\d_]*$/gi
그리고 가장 의미하는 바는
abcd True
abcd12 True
ab12cd True
12abcd True
1234 False
^ ... $
-시작하고 끝나는 패턴과 일치[\d]*
-0 자리 이상 일치[a-z_]
-알파벳이나 밑줄과 일치[a-z\d_]*
-알파벳이나 숫자 또는 밑줄과 일치/gi
-문자열 전체에서 대소 문자를 구분하지 않고 전역 적으로 일치1234
저자에 의해 요청 된 언어의 단어입니다. 당신의 언어는 더 제한적입니다.
나에게 알파, 숫자 및 알파벳 숫자를 구별하고 싶은 문제가있어서 영숫자 문자열에 적어도 하나의 알파와 적어도 하나의 숫자가 포함되도록하려면 다음을 사용했습니다.
^([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+$/
설명:
자신을 확인하십시오 :
const regex = /^\w+$/;
const str = `nut_cracker_12`;
let m;
if ((m = regex.exec(str)) !== null) {
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}