정규표현식
RegExp는 정규 표현식 객체이다.
/ ~ /로 표현한다. ("/ ~ /", '/ ~ /' 모두 아니다!)
정규 표현식 객체에는 test()와 exec() 메소드가 있다.
test()는 아규먼트로 들어온 문자열이 정규 표현식에 부합한지를 판단하여 불린 값을 리턴한다.
exec()는 아규먼트로 들어온 문자열에서 정규 표현식에 부합된 문자열을 찾아 리턴한다.
var regExp = /Java/; var testStr = "www.java-school.net is the best site to learn Java"; var retArr = regExp.exec(testStr); alert(retArr[0]);
i flag
정규 표현식 객체의 끝의 / 다음에 오는 문자열은 플래그다.
i 플래그가 붙으면 대소문자를 가리지 않는다.
var regExp = /Java/i; var testStr = "www.java-school.net is the best site to learn Java"; var retArr = regExp.exec(testStr); alert(retArr[0]);
g flag
g 플래그를 사용하면 마지막으로 매칭 된 위치를 기억하고 있다가
다음번의 exec()를 호출되면 그다음 위치부터 매칭 되는 곳을 찾게 된다.
var regExp = new RegExp('Java', 'gi'); // /Java/gi
var testStr = "www.java-school.net is the best site to learn Java";
var retArr = regExp.exec(testStr);
retArr = regExp.exec(testStr);
alert(retArr[0]);
/../ 사이의 문자
| 횟수 | |
|---|---|
| * | 0회 이상 |
| + | 1회 이상 |
| ? | 0 또는 1회 |
| . | 정확히 1회 |
| {} |
중괄호는 문자의 반복 횟수를 지정할 때 사용한다. s{2} s의 두 번 반복 즉, ss를 의미한다. |
var regExp = /Java-*/gi; var testStr = "www.java-school.net is the best site to learn Java"; var retArr = regExp.exec(testStr); retArr = regExp.exec(testStr); alert(retArr[0]);
|
\ 다음 일반 문자는 약속된 특수 문자로 취급 \ 다음 특수 문자는 문자 그 자체로 취급 |
|
|---|---|
| \w | 낱말, 정확히는 알파벳과 숫자와 _를 의미한다. |
| \W | \w 반대 |
| \d | 숫자 |
| \D | \d와 반대, \D*는 문자 0회 이상을 의미한다. |
| \s | 공백문자 |
var regExp = /\s\*/g; var testStr = "www.java-school.net *is *the *best *site *to *learn *JAVA"; var retStr = testStr.replace(regExp,'-'); alert(retStr);
다음은 회원가입을 위한 폼이다.
<form id="signUp" action="signUp" method="post" onsubmit="return check()">
이름 <input type="text" name="name" />
<!-- 중간 생략 -->
</form>
이름에 해당하는 파라미터의 값이 공백문자로만 이루어졌는지 검사하는 자바스크립트 코드를 작성한다.
function check() {
var regExp = /\s/g;
var form = document.getElementById("signUp");
var name = form.name.value;
name = name.replace(regExp,"");
if (name.length == 0) {
alert("이름이 유효하지 않습니다.");
return false;
}
return true;
}
| 시작(^)과 끝($) | |
|---|---|
| ^ | 시작를 의미, /^JAVA/는 시작부에서 JAVA를 찾는다. |
| $ | 끝을 의미, /school$/은 끝에서 school를 찾는다. |
| 여러 문자를 매칭하고 싶다면 [] 안에 나열한다. | |
|---|---|
| [a-zA-Z] | 알파벳을 찾는다. |
| [0-9] | 숫자를 찾는다. |
| [] 안의 ^ | ^ 가 [ ] 안에서 쓰이면 ~을 제외한다는 의미이다. [^0-9]는 \D와 같다. |
| () |
괄호로 묶은 패턴은 매칭 된 다음 그 부분을 기억하고 그 값을 배열과 같이 저장된다. 기억되는 부분 문자열은 $1, $2, ...에 저장된다. |
|---|---|
| | | "또는"를 의미한다. a|b는 a 또는 b, a|b|c는 a 또는 b 또는 c |
필요한 정규 표현식 얻기
다음 사이트에서 이메일에 대한 정규 표현식을 얻을 수 있다.
http://regexlib.com
이를 이용해서 사용자가 입력한 이메일과 날짜가 유효한 값인지 체크하는 자바스크립트 함수를 만들어 본다.
var emailRegExp = /^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/;
var dateRegExp = /^\d{4}\/\d{2}\/\d{2}/;
//테스트 데이터
var email = "hong@gmail.org";
var signUpDate = "2015/1/16";
var check = emailRegExp.test(email);
if (check) {
alert("유효한 이메일");
} else {
alert("유효하지 않은 이메일");
}
check = dateRegExp.test(signUpDate);
if (check) {
alert("유효한 등록일");
} else {
alert("유효하지 않은 등록일");
}
참고
