정규표현식
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("유효하지 않은 등록일"); }참고