특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어
즉, 특정한 형태가 규칙을 가진 문자열을 찾기 위해 그 형태나 규칙을 나타내는 패턴을 정의하는 식
패턴 | 의미 | 예시 |
---|---|---|
. | 임의의 문자 1개 | a.b 는 "aab", "acb"와 일치 |
^ | 문자열 시작 | ^abc 는 "abc"로 시작하는 문자열과 일치 |
$ | 문자열 끝 | abc$ 는 "abc"로 끝나는 문자열과 일치 |
* | 0개 이상의 반복 | ab*c 는 "ac", "abc", "abbc" 등과 일치 |
+ | 1개 이상의 반복 | ab+c 는 "abc", "abbc" 등과 일치 |
? | 0개 또는 1개 | ab?c 는 "ac" 또는 "abc"와 일치 |
패턴 | 의미 | 예시 |
---|---|---|
[abc] | a, b, c 중 하나 | [abc] 는 "a", "b", "c" 중 하나에 일치 |
[^abc] | a, b, c 제외한 문자 | [^abc] 는 "d", "e" 등 a, b, c가 아닌 문자에 일치 |
[a-z] | 소문자 a부터 z까지 | [a-z] 는 "a", "b", ..., "z" 중 하나에 일치 |
[A-Z] | 대문자 A부터 Z까지 | [A-Z] 는 "A", "B", ..., "Z" 중 하나에 일치 |
[0-9] | 숫자 0부터 9까지 | [0-9] 는 "0", "1", ..., "9" 중 하나에 일치 |
패턴 | 의미 | 동등한 표현 |
---|---|---|
\d | 숫자 (0-9) | [0-9] |
\D | 숫자 제외 | [^0-9] |
\w | 단어 문자 (알파벳, 숫자, 밑줄) | [a-zA-Z0-9_] |
\W | 단어 문자 제외 | [^a-zA-Z0-9_] |
\s | 공백 문자 | 스페이스, 탭, 줄바꿈 |
\S | 공백 문자 제외 | 공백이 아닌 모든 문자 |
패턴 | 의미 | 예시 |
---|---|---|
{n} | 정확히 n번 반복 | a{3} 는 "aaa"와 일치 |
{n,} | n번 이상 반복 | a{2,} 는 "aa", "aaa"와 일치 |
{n,m} | n번 이상 m번 이하 반복 | a{2,3} 는 "aa", "aaa"와 일치 |
입력한 문자열이 숫자로만 이루어져 있는지 검증하는 예시 코드이다.
문자열의 모든 문자를 하나씩 순회하며 숫자인지 확인해야 한다. 코드가 길어지고 로직이 복잡해진다.
const isAllDigits = (str) {
// 빈 문자열은 숫자로만 이루어진 것이 아니라고 판단
if (str === "") {
return false;
}
// 문자열의 모든 문자를 하나씩 확인
for (let char of str) {
// isNaN(Number(char)) 은 ' ' (공백)을 숫자로 취급하는 등 허점이 있음
// 따라서 더 엄격한 검사를 위해 유니코드 값을 확인하는 것이 좋음
if (char < '0' || char > '9') {
return false; // 숫자가 아닌 문자가 하나라도 있으면 false 반환
}
}
// 모든 문자가 숫자이면 true 반환
return true;
};
console.log(isAllDigits("12345")); // true
console.log(isAllDigits("123a5")); // false
console.log(isAllDigits(" 12345 ")); // false
단 한 줄의 정규표현식으로 동일한(그리고 더 정확한) 검증을 수행할 수 있다.
^
: 문자열의 시작
\d
: 숫자 (0-9)
+
: 앞의 패턴(\d)이 하나 이상 반복됨
$
: 문자열의 끝
^
와 $
를 함께 사용하면 "문자열 전체가 오직 숫자로만 구성되어야 한다"는 엄격한 규칙이 만들어진다.
const isAllDigits = (str) {
// /^\d+$/ 패턴: 문자열의 시작(^)부터 끝($)까지 숫자(\d)가 1개 이상(+) 있는지 검사
const regex = /^\d+$/;
return regex.test(str);
};
console.log(isAllDigits("12345")); // true
console.log(isAllDigits("123a5")); // false
console.log(isAllDigits(" 12345 ")); // false (공백 때문에 실패)