[펌] eclipse short cuts

프로그래밍/Library 2007. 11. 28. 09:32 Posted by galad
페이지 이동 CTRL + E



VIEW 들의 이동. (Package Explorer, source, Outlines...) : CTRL+F7



Perspective 같은 이동(?)  : CTRL+F8







===== 실행 =====

1. Ctrl + F11 : 바로 전에 실행했던 클래스 실행







===== 소스 네비게이션 =====

1. Ctrl + 마우스커서(혹은 F3) : 클래스나 메소드 혹은 멤버를 상세하게 검색하고자 할때

2. Alt + ->, Alt + <- : 이후, 이전

3. Ctrl + o : 해당 소스의 메소드 리스트를 확인하려 할때

4. F4 : 클래스명을 선택하고 누르면 해당 클래스의 Hierarchy 를 볼 수 있다.



===== 문자열 찾기 =====

1. Ctrl + k : 찾고자 하는 문자열을 블럭으로 설정한 후 키를 누른다.

2. Ctrl + Shift + k : 역으로 찾고자 하는 문자열을 찾아감.

3. Ctrl + j : 입력하면서 찾을 수 있음.

4. Ctrl + Shift + j : 입력하면서 거꾸로 찾아갈 수 있음.

5. Ctrl + f : 기본적으로 찾기







===== 소스 편집 =====

1. Ctrl + Space : 입력 보조장치(Content Assistance) 강제 호출 => 입력하는 도중엔 언제라도 강제 호출 가능하다.

2. F2 : 컴파일 에러의 빨간줄에 커서를 갖져다가 이 키를 누르면 에러의 원인에 대한 힌트를 제공한다.

3. Ctrl + l : 원하는 소스 라인으로 이동

  로컬 히스토리 기능을 이용하면 이전에 편집했던 내용으로 변환이 가능하다.

4. Ctrl + Shift + Space : 메소드의 가로안에 커서를 놓고 이 키를 누르면 파라미터 타입 힌트를 볼 수 있다.



5. 한줄 삭제 CTRL + D



6. 파일 닫기 : CTRL+W



7. 들여쓰기 자동 수정. (3.0 NEW) : CTRL+I



8. 블록 주석(/*..*/) 추가.(3.0 NEW): CTRL+SHIFT+/



  8.1 Ctrl + / 해주면 여러줄이 한꺼번에 주석처리됨. 주석 해제하려면 반대로 하면 됨.

9. 위(아래)줄과 바꾸기 : ALT+UP(DOWN)



10. 블록 선택하기.  : ALT+SHIFT+방향키



11. 메소드의 파라메터 목록 보기. : CTRL+SHIFT+SPACE

12. 자동으로 import 하기 : CTRL+SHIFT+O



13. 열린 파일 모두 닫기 : CTRL + SHIFT + F4



14. 블록 주석 제거 : CTRL+SHIFT+\



15. 전체화면 토글 : CTRL+M



16. 한줄(블럭) 복사 : Ctrl + Alt + 위(아래)



17. 다음 annotation(에러, 워닝, 북마크 가능)으로 점프 : Ctrl + , or .



18. 퀵 픽스 : Ctrl + 1

19. 메소드 정의부로 이동 : F3

20. 하이어라키 팦업 창 띄우기(인터페이스 구현 클래스간 이동시 편리) : Ctrl + T



21. 메소드나 필드 이동하기 CTRL + O

22. ULTRAEDIT나 EDITPLUS 의 CTRL+TAB 과 같은 기능. : CTRL+F6







===== 템플릿 사용 =====

1. sysout 입력한 후 Ctrl + Space 하면 System.out.println(); 으로 바뀐다.

2. try 입력한 후 Ctrl + Space 하면 try-catch 문이 완성된다.

3. for 입력한 후 Ctrl + Space 하면 여러가지 for 문을 완성할 수 있다.

4. 템플릿을 수정하거나 추가하려면 환경설정/자바/편집기/템플리트 에서 할 수 있다.







===== 메소드 쉽게 생성하기 =====

1. 클래스의 멤버를 일단 먼저 생성한다.

2. override 메소드를 구현하려면 : 소스->메소드대체/구현 에서 해당 메소드를 체크한다.

3. 기타 클래스의 멤버가 클래스의 오브젝트라면 : 소스->위임메소드 생성에서 메소드를 선택한다.







===== organize import =====

1. 자바파일을 여러개 선택한 후 소스 -> 가져오기 체계화 해주면 모두 적용된다.







===== 소스 코드 형식 및 공통 주석 설정 =====

1. 환경설정 -> 자바 -> 코드 스타일 -> 코드 포멧터 -> 가져오기 -> 프로파일.xml 을 불러다가 쓰면 된다.

2. 또한 다수의 자바파일에 프로파일을 적용하려면 패키지 탐색기에서 패키지를 선택한 후 소스 -> 형식화를 선택하면 된다.

3. 환경설정 -> 자바 -> 코드 스타일 -> 코드 템플리트 -> 가져오기 -> 템플리트.xml 을 불러다가 쓰면 된다.







===== 에디터 변환 =====

1. 에디터가 여러 파일을 열어서 작업중일때 Ctrl + F6 키를 누르면 여러파일명이 나오고 F6키를 계속 누르면 아래로

2. Ctrl + Shift + F6 키를 누르면 위로 커서가 움직인다.

3. Ctrl + F7 : 뷰간 전환

4. Ctrl + F8 : 퍼스펙티브간 전환

5. F12 : 에디터로 포커스 위치







===== JAVA Doc 생성 =====

1. 프로젝트 -> Javadoc 생성







===== 내보내기 =====

해당 프로젝트를 zip 행태로 압축해서 보관할 수 있다.







===== 자바 찾아보기 perspective =====

해당 프로젝트를 보다 편리하게 한번 둘러보는데 좋다.







===== 스크랩북 =====

1. 스크랩북을 이용하면 자바파일을 만들어 테스트 해보지 않고도 간단하게 테스트 해 볼 수 있다.

2. 패키지 탐색기에서 신규 -> 기타 -> 자바 -> 자바 실행/디버그 -> 스크랩북 페이지 선택







===== 디버그 =====

1. F5(Step Into) : 현재의 명령문이 호출되는 메소드 속으로 진행하여, 그 첫 문장을 실행하기 전에 멈춘다.

  하지만 자바 라이브러리 클래스 수준까지 들어가므로 단계필터 사용을 체크(Shift+F5)를 하면 필터를 설정한 클래스에 대하서는 Step Over 기능과 같은 기능을 수행한다.

2. F6(Step Over) : 현재의 명령문을 실행하고 다음 명령문 직전에 다시 멈춘다.

3. F7(Step Return) : 현재의 메소드에서 리턴한 직후에 다시 멈춘다.

4. F8(Resume) : 멈추어 있던 쓰레드를 다시 계속 실행한다.

5. Display view(표시) : 창 -> 보기표시 -> 표시 선택하여 소스상에서 필요한 부분을 선택해서
실행시켜 볼 수 있다.  한 순간의 값만 필요할 때 볼 수 있는 반면에 아래놈은 계속적으로 값이 변하는 것을 확인 할 수 있다.

6. Expression view(표현식) : 복잡한 식 혹은 객체를 디버깅 하면서 계속 볼 수있는 창이다.

  마우스 오른버튼 -> 감시 표시식 추가 선택한 후 사용한다.

  환경설정 -> 자바 -> 디버그 -> 세부사항 포멧터 선택 후 보기 편한 식으로 편집하면



  Expression View 에서 결과를  실시간으로 확인 할 수 있다.

7. 디버깅 하면서 소스를 수정하고 프로그램을 다시 시작할 필요 없이 계속 디버깅을 진행 할 수 있다.

  다만 메소드를 추가하거나 필드를 추가하면 프로그램을 다시 시작해야 한다.

8. Drop to Frame(프레임에 놓기) 는 정말 모르겠다.

9. 디버깅 작업을 할때 해당 라이브러리의 소스코드를 첨부하지 않으면 진행상황을 볼 수 없을 경우

  해당 라이브러리에 소스코드를 첨부할 수 있다. 해당 프로젝트 -> 특성 -> Java 빌드경로 -> 라이브러리 -> 소스참조

  편집 버튼을 눌러서 첨부 한다.







===== 도움말 =====

"JDT 팁과 요령"이라고 치면 여러가지 흥미로운 팁이 나온다.







===== Refactoring =====

1. Pull Down : 수퍼클래스의 멤버나 메소드를 하위 클래스로 내리는 행위

2. Push Up : 하위 클래스의 멤버나 메소드를 상위 클래스로 올리는 행위







===== CVS =====

1. CVS 서버로는 윈도우에 CVSNT 최신버젼을 설치하고, [컴퓨터 관리]를 통해서 사용자를 추가한다.

- CVSNT 를 설치할때 윈도우의 경우 Repositories 를 추가할때 접두어를 사용하지 말고 디렉토리 풀이름(d:/cvs) 이런식

  으로 등록해야 Eclipse 와 에러없이 동기화가 잘 된다.

2. Eclipse 에 CVS 저장소 perspective 에서 새로운 저장소를 등록한 후 HEAD 에서 해당 프로젝트를 체크아웃하면

  자바 perspective 에 등록되는 것을 확인할 수 있다.
제목 : [질문]eclipse 에서 run 실행시 jvm 에 대한 세팅은 어디서 하나요?
글쓴이: 손님(guest) 2006/07/25 14:54:16 조회수:636 줄수:13
eclipse 에서 대용량의 파일(xml파일) 을 읽어 들여서 처리하는 프로그램을 개발한 후에 테스트를 하려고
이클립스의 Run As Java application 을 클릭하여 실행을 하니 OutOfMemory 에러가 발생했습니다.

이클립스에서 Run 을 하면 새로운 JVM 이 따로 떠서 실행을 하는 것 같던데 그 거에 대해서
초기 메모리 setting 을 하는 방법이 없는지 아시는 분은 답변부탁드립니다.

-Xms -Xmx option 을 설정하려고 하는데 찾아봐도 이클립스 자체를 실행시킬때 옵션 주는 거 밖에는
안나오더군요..

질문을 다시 정리하면 이클립스에서 Run을 했을때 어플리케이션을 실행시키기 위해 새로 실행되는 
JVM 에 대한 옵션을 주는 법을 알려주시면 감사하겠습니다.

제목 : Re: 제기억엔.
글쓴이: 깨끗한손(guest) 2006/07/31 17:12:34 조회수:339 줄수:9
이클립스에서 Run 을 하면 조그만 실행 윈도우가 열립니다.
메인 클래스 이름이 적혀있고. 아래에 Run, close 버튼이 있습니다.(^^)
여러가지 옵션을 줄수있게 탭들이 있는데 이곳에서 
아규먼트, jre , 클래스패스, 시스템 변수등을 다 세팅할 수 있습니다.

아규먼트 탭에. VM 아규먼트로 있을듯 합니다. 
(지금 이클립스가 안 깔린 컴퓨터 라서 ㅡ.ㅡ)
제목 : Re: 이렇게 하세요~
글쓴이: 손님(guest) 2006/08/03 09:54:36 조회수:334 줄수:6
실행할 화일의 등록정보를 여시고
아래처럼 셋팅하시면 됩니다.

D:\eclipse\eclipse.exe -vm C:\Progra~1\Java\j2sdk1.4.2_05\bin\javaw.exe -vmargs -Xmx256m

제목 : Re:Re:제기억엔.
글쓴이: 손님(guest) 2006/08/04 14:00:18 조회수:305 줄수:18
우선 답변 감사드립니다.

>이클립스에서 Run 을 하면 조그만 실행 윈도우가 열립니다.
>메인 클래스 이름이 적혀있고. 아래에 Run, close 버튼이 있습니다.(^^)
>여러가지 옵션을 줄수있게 탭들이 있는데 이곳에서 
>아규먼트, jre , 클래스패스, 시스템 변수등을 다 세팅할 수 있습니다.

>아규먼트 탭에. VM 아규먼트로 있을듯 합니다. 
>(지금 이클립스가 안 깔린 컴퓨터 라서 ㅡ.ㅡ)


거기는 찾아봤는데 JRE 탭에 jvm 의 옵션을 주는 란이 없는 것 같은데요.. 


그리고 바로 위에 이렇게하세요~ 라고 써주신 분이 알려주신 거에서 vm 옵션을 줄수 있다는 건 알겠는데 
그 vm 에 대해서 Xmx 옵션은 어떻게 줘야 하죠?
맨 뒤에 있는 -Xmx256m 은 C:\Progra~1\Java\j2sdk1.4.2_05\bin\javaw.exe 에 적용되는 옵션이 아니라
eclipse.exe 에 적용되는 옵션이 아닌지요...
제목 : Re: eclipse.ini 파일을 수정하시면 됩니다.
글쓴이: 손님(guest) 2006/11/20 15:59:38 조회수:248 줄수:13
eclipse 폴더에 보시면 
eclipse.ini 구성설정 파일이 있습니다. 

-vmargs-Xms40m-Xmx256m

이부분을 원하는 환경으로 설정해주시면 됩니다.

-vmargs-Xms40m(최소값)-Xmx256m(최대값)

'프로그래밍 > Library' 카테고리의 다른 글

[펌] JUnit 2  (0) 2007.11.28
[펌] eclipse short cuts  (0) 2007.11.28
Tomcat 다운현상  (0) 2007.11.28
james mail server  (0) 2007.11.28
[펌] james mail server setting  (0) 2007.11.28

Tomcat 다운현상

프로그래밍/Library 2007. 11. 28. 09:31 Posted by galad
제목 : Tomcat 다운현상
글쓴이: 손님(guest) 2005/12/21 14:20:39 조회수:1098 줄수:53
프로젝트 마무리 단계로 고객측 서버에서 테스트를 하고 있는데, 잘되다가 멈춰버리면서 접근이 안되네요.
좀 기다렸다가 다시 접속하거나 또는 톰캣을 내렸다가 올리면 되는데, 근본적으로 원인을
찾아야 할것 같습니다.

우선 톰캣로그에는 항상 저런형태는 아니지만, 비슷한 에러가 자주 발생을 하는듯
하구요, 톰캣 실행은  -server -Xms128m -Xmx256m -verbosegc 옵션을 주고 있고,
서버환경은

HP-UX B.11.11
Tomcat 5.5.9
Java 1.5.0.02

입니다. 아 그리고, 오늘 다운됐을때 로그를 보니까 계속 Full GC가 반복해서 일어나고 있더라구요.



2005. 12. 21 오전 9:45:07 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable run
심각: Caught exception (java.lang.OutOfMemoryError: Java heap space) executing org.apache.jk.common.SocketConnection@aabe60, terminating thread
2005. 12. 21 오전 9:45:07 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable run
심각: Caught exception (java.lang.OutOfMemoryError: Java heap space) executing org.apache.jk.common.SocketConnection@7e6732, terminating thread
2005. 12. 21 오전 9:45:07 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable run
심각: Caught exception (java.lang.OutOfMemoryError: unable to create new native thread) executing org.apache.jk.common.SocketAcceptor@221b8b, terminating thread
2005. 12. 21 오전 9:45:21 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable run
심각: Caught exception (java.lang.OutOfMemoryError: Java heap space) executing org.apache.jk.common.SocketConnection@85a60, terminating thread
2005. 12. 21 오전 9:46:16 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 21 오전 9:46:25 org.apache.jasper.compiler.JspReader pushFile
심각: Exception parsing file 
java.lang.OutOfMemoryError: Java heap space
2005. 12. 21 오전 9:50:41 org.apache.jasper.compiler.JspReader pushFile
심각: Exception parsing file 
java.lang.OutOfMemoryError: Java heap space
2005. 12. 21 오전 9:50:54 org.apache.jasper.compiler.JspReader pushFile
심각: Exception parsing file 
java.lang.OutOfMemoryError: Java heap space
2005. 12. 21 오전 9:51:59 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 21 오전 9:53:36 org.apache.catalina.connector.CoyoteAdapter service
심각: An exception or error occurred in the container during the request processing
java.lang.OutOfMemoryError: Java heap space
2005. 12. 21 오전 9:54:16 org.apache.jasper.compiler.JspReader pushFile
심각: Exception parsing file 
java.lang.OutOfMemoryError: Java heap space
2005. 12. 21 오전 9:54:19 org.apache.jasper.compiler.JspReader pushFile
심각: Exception parsing file 
java.lang.OutOfMemoryError: Java heap space
2005. 12. 21 오전 9:54:29 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable run
심각: Caught exception (java.lang.OutOfMemoryError: Java heap space) executing org.apache.jk.common.SocketConnection@d9624, terminating thread
2005. 12. 21 오전 9:54:57 org.apache.jasper.compiler.JspReader pushFile
심각: Exception parsing file 
java.lang.OutOfMemoryError: Java heap space
2005. 12. 21 오전 9:58:50 org.apache.jasper.compiler.JspReader pushFile
심각: Exception parsing file 
제목 : Re: verbosegc 로그를 올려봐요.
글쓴이: 이원영(javaservice) 2005/12/21 19:59:09 조회수:447 줄수:6
verbosegc 로그를 올려봐요.

자바서비스넷 이원영
Phone: 010-6239-6498
E-mail: NOSPAM_lwy@javaservice.com
MSN: NOSPAM_javaservice@hanmail.net
제목 : Re: GC 로그 입니다.
글쓴이: 손님(guest) 2005/12/22 10:31:31 조회수:502 줄수:135
좀더 자세하게 출력해보기 위해서 옵션을 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC 로
줘서 다시 실행시켜 보고 있는 중입니다. 

오늘 outofmemory 발생 이전의 일부분과 발생후의 로그를 올려봅니다.


{Heap before GC invocations=1454:
Heap
 PSYoungGen      total 141120K, used 126050K [6e000000, 78aa0000, 78aa0000)
  eden space 109696K, 99% used [6e000000,74b1dd10,74b20000)
  from space 31424K, 52% used [76b60000,77b5ab68,78a10000)
  to   space 32512K, 0% used [74b20000,74b20000,76ae0000)
 PSOldGen        total 349568K, used 128281K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 36% used [58800000,60546648,6dd60000)
 PSPermGen       total 31744K, used 29458K [54800000, 56700000, 58800000)
  object space 31744K, 92% used [54800000,564c4978,56700000)
56943.386: [GC [PSYoungGen: 126050K->22406K(132160K)] 254331K->160687K(481728K), 1.2878866 secs]
 Heap after GC invocations=1454:
Heap
 PSYoungGen      total 132160K, used 22406K [6e000000, 78aa0000, 78aa0000)
  eden space 109696K, 0% used [6e000000,6e000000,74b20000)
  from space 22464K, 99% used [74b20000,76101850,76110000)
  to   space 35456K, 0% used [76800000,76800000,78aa0000)
 PSOldGen        total 349568K, used 138281K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 39% used [58800000,60f0a648,6dd60000)
 PSPermGen       total 31744K, used 29458K [54800000, 56700000, 58800000)
  object space 31744K, 92% used [54800000,564c4978,56700000)
} 
 {Heap before GC invocations=1455:
Heap
 PSYoungGen      total 132160K, used 132089K [6e000000, 78aa0000, 78aa0000)
  eden space 109696K, 99% used [6e000000,74b1cc68,74b20000)
  from space 22464K, 99% used [74b20000,76101850,76110000)
  to   space 35456K, 0% used [76800000,76800000,78aa0000)
 PSOldGen        total 349568K, used 138281K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 39% used [58800000,60f0a648,6dd60000)
 PSPermGen       total 31744K, used 29492K [54800000, 56700000, 58800000)
  object space 31744K, 92% used [54800000,564cd1e0,56700000)
57028.604: [GC [PSYoungGen: 132089K->2203K(140672K)] 270370K->141300K(490240K), 0.1712235 secs]
 Heap after GC invocations=1455:
Heap
 PSYoungGen      total 140672K, used 2203K [6e000000, 78aa0000, 78aa0000)
  eden space 105216K, 0% used [6e000000,6e000000,746c0000)
  from space 35456K, 6% used [76800000,76a26dc0,78aa0000)
  to   space 34048K, 0% used [746c0000,746c0000,76800000)
 PSOldGen        total 349568K, used 139096K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 39% used [58800000,60fd6258,6dd60000)
 PSPermGen       total 31744K, used 29492K [54800000, 56700000, 58800000)
  object space 31744K, 92% used [54800000,564cd1e0,56700000)
}  {Heap before GC invocations=1456:
Heap
 PSYoungGen      total 140672K, used 107419K [6e000000, 78aa0000, 78aa0000)
  eden space 105216K, 100% used [6e000000,746c0000,746c0000)
  from space 35456K, 6% used [76800000,76a26dc0,78aa0000)
  to   space 34048K, 0% used [746c0000,746c0000,76800000)
 PSOldGen        total 349568K, used 139096K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 39% used [58800000,60fd6258,6dd60000)
 PSPermGen       total 31744K, used 29531K [54800000, 56700000, 58800000)
  object space 31744K, 93% used [54800000,564d6c18,56700000)
57030.592: [GC [PSYoungGen: 107419K->33204K(138432K)] 246516K->173516K(488000K), 2.3490715 secs]
 Heap after GC invocations=1456:
Heap
 PSYoungGen      total 138432K, used 33204K [6e000000, 78aa0000, 78aa0000)
  eden space 105216K, 0% used [6e000000,6e000000,746c0000)
  from space 33216K, 99% used [746c0000,7672d248,76730000)
  to   space 36288K, 0% used [76730000,76730000,78aa0000)
 PSOldGen        total 349568K, used 140312K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 40% used [58800000,61106130,6dd60000)
 PSPermGen       total 31744K, used 29531K [54800000, 56700000, 58800000)
  object space 31744K, 93% used [54800000,564d6c18,56700000)
}  {Heap before GC invocations=1457:
Heap
 PSYoungGen      total 138432K, used 138397K [6e000000, 78aa0000, 78aa0000)
  eden space 105216K, 99% used [6e000000,746ba2a0,746c0000)
  from space 33216K, 99% used [746c0000,7672d248,76730000)
  to   space 36288K, 0% used [76730000,76730000,78aa0000)
 PSOldGen        total 349568K, used 140312K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 40% used [58800000,61106130,6dd60000)
 PSPermGen       total 31744K, used 29531K [54800000, 56700000, 58800000)
  object space 31744K, 93% used [54800000,564d6c18,56700000)
57035.835: [GC [PSYoungGen: 138397K->16265K(131776K)] 278709K->179145K(481344K), 0.9527750 secs]
 Heap after GC invocations=1457:
Heap
 PSYoungGen      total 131776K, used 16265K [6e000000, 78aa0000, 78aa0000)
  eden space 95488K, 0% used [6e000000,6e000000,73d40000)
  from space 36288K, 44% used [76730000,77712580,78aa0000)
  to   space 39616K, 0% used [73d40000,73d40000,763f0000)
 PSOldGen        total 349568K, used 162880K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 46% used [58800000,62710130,6dd60000)
 PSPermGen       total 31744K, used 29531K [54800000, 56700000, 58800000)
  object space 31744K, 93% used [54800000,564d6c18,56700000)
} 2005. 12. 22 오전 10:11:52 org.apache.tomcat.util.threads.ThreadPool$ControlRunnable run
심각: Caught exception (java.lang.OutOfMemoryError: unable to create new native thread) executing org.apache.jk.common.SocketAcceptor@b7299b, terminating thread
2005. 12. 22 오전 10:11:52 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:52 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:53 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:53 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:53 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:53 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:53 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:54 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:54 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
2005. 12. 22 오전 10:11:54 org.apache.jk.common.ChannelSocket processConnection
경고: processCallbacks status 2
 {Heap before GC invocations=1458:
Heap
 PSYoungGen      total 131776K, used 111753K [6e000000, 78aa0000, 78aa0000)
  eden space 95488K, 100% used [6e000000,73d40000,73d40000)
  from space 36288K, 44% used [76730000,77712580,78aa0000)
  to   space 39616K, 0% used [73d40000,73d40000,763f0000)
 PSOldGen        total 349568K, used 162880K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 46% used [58800000,62710130,6dd60000)
 PSPermGen       total 31744K, used 29578K [54800000, 56700000, 58800000)
  object space 31744K, 93% used [54800000,564e2810,56700000)
57041.924: [GC [PSYoungGen: 111753K->1897K(135104K)] 274633K->165667K(484672K), 0.0574536 secs]
 Heap after GC invocations=1458:
Heap
 PSYoungGen      total 135104K, used 1897K [6e000000, 78aa0000, 78aa0000)
  eden space 95488K, 0% used [6e000000,6e000000,73d40000)
  from space 39616K, 4% used [73d40000,73f1a5c0,763f0000)
  to   space 38464K, 0% used [76510000,76510000,78aa0000)
 PSOldGen        total 349568K, used 163770K [58800000, 6dd60000, 6dd60000)
  object space 349568K, 46% used [58800000,627eea38,6dd60000)
 PSPermGen       total 31744K, used 29578K [54800000, 56700000, 58800000)
  object space 31744K, 93% used [54800000,564e2810,56700000)
} 
제목 : Re: 오전에 발생한 현상은...
글쓴이: 이원영(javaservice) 2005/12/22 15:16:35 조회수:380 줄수:16
오전에 발생한 현상은 heap 메모리와는 무관하게 HP-UX의 커널파라메터인 max_thread_proc 값에
영향은 받은 것 같습니다. default가 64이기 때문에 하나의 process가 64개 이상의 thread를 
생성하지 못합니다.

보시는 방법은
kmtune | grep max_thread_proc
하시면 될 겁니다.

NOTE: 그러나, 맨 처음 올려주신 OutOfMemoryError는 heap 힙메모리와 관련되어 있는 것으로
추정되며, 오전 상황과는 다른 이슈로 보입니다. 해당 현상이 일어났을 때, 앞서처럼 verbosegc
결과를 올려주시면 가이드를 드리겠습니다.

자바서비스넷 이원영
Phone: 010-6239-6498
E-mail: NOSPAM_lwy@javaservice.com
MSN: NOSPAM_javaservice@hanmail.net
제목 : Re: 그렇다면 thread 수가 일반적인것인지요?
글쓴이: 손님(guest) 2005/12/22 15:48:14 조회수:343 줄수:12
그렇군요. heap 메모리에 대해서는 프로그램적인 누수가 있을수도 있지만, 아직 정확하게
파악할수 있지는 못해서 1차적으로 java option에서 메모리 옵션을 늘려서 지켜보고 있는
상황입니다.

말씀하신것처럼 thread의 수가 64개로 잡혀있네요.

max_thread_proc            64  -  64

그런데 제가 시스템 엔지니어가 아니다보니
이 수치가 준포탈급의 사이트를 운영하기에 적당한것인지에 대해서는 잘 모르겠네요.

항상 도움만 받아가네요. 감사합니다.
제목 : Re: HP-UX의 Thread 모델은..
글쓴이: 이원영(javaservice) 2005/12/22 15:55:02 조회수:633 줄수:31
HP-UX의 Thread 모델은 IBM AIX나 SUN Solaris에 비해 상대적으로 무겁습니다. 그래서 JVM하나에서
여러개의 Thread를 띄우는 것이 상대적으로 힘겹게 다가옵니다. 그래서인지, default로 설정된 
max_thread_proc 64개는 WAS(웹어플리케이션서버)와 같이 하나의 JVM에서 multi-thread로 구동되는
환경에서 늘 한번씩 겪는 것으로 상대적으로 작게 설정되어 있는 감이 늘 있습니다. 튜닝시 약방의
감초처럼 항상 올려주어야 합니다.

(Thread 모델의 특성 그렇다는 것이지, HP-UX가 WAS를 운영하기에 성능이 좋지 않다는 얘기가
 전혀 아닙니다. Thread를 키우는 것 보다 process를 multi로 클러스터링 하는 것이 HP-UX에서는 보다
 효과적이며, 개인적인 생각으로는 HP-UX가 WAS운영머신 및 성능적 관점에서 매우 유리한 위치를
 차지하고 있다고 생각합니다.)

Tomcat의 허용가능한 최대 thread 보다는 최소한 max_thread_proc 값이 크게 잡혀있어야 겠지요.

그러면 Tomcat의 최대 thread값은 얼마가 적당하냐란 질문이 나올 수 있는데, 이건 답이 없는
문제로서, 해당 사이트의 특성에 맞게 설정해야 합니다. (제니퍼와 같은 APM툴을 사용하시면
운영중에 몇개의 thread가 늘 쓰이는지를 모니터링 하실 수 있겠지요)

액티브서비스의 개수는 깔때기에 물을 일정하게 내려보낼 때, 그 물높이 해당 하는 특성이 있습니다.
단위시간당 흘러나올 수 있는 물의 량보다 단위시간당 흘러들어오는 물의 량이 근접하게 될 때,
물높이는 상대적으로 짧은 시간에 높아집니다.(정확히는 분수함수의 특성이 있습니다.)
무엇인가 backend에서 잠시 막히면 순식간에 차 올라오게 되지요. 따라서, 50개냐, 100개냐,
200개냐의 문제가 아닙니다. 50보 100보의 특성이 있는 것이지요.

-------
2005.12.23 첨언
아래 질문에 대해, "예, 적어도 그렇습니다."

자바서비스넷 이원영
Phone: 010-6239-6498
E-mail: NOSPAM_lwy@javaservice.com
MSN: NOSPAM_javaservice@hanmail.net
제목 : Re: 그렇다면...?
글쓴이: 손님(guest) 2005/12/22 18:36:40 조회수:297 줄수:9
일반적으로 tomcat의 server.xml에 

    <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

와 같이 설정이 되어 있는데요, 그렇다면 HP-UX의 max_thread_proc 값이 위의 maxThreads 값보다는 
즉, 150과 같거나 높게 설정이 되어야 하는건가요?


http://www.javaservice.net/ 펌...

'프로그래밍 > Library' 카테고리의 다른 글

[펌] eclipse short cuts  (0) 2007.11.28
[펌] eclipse 에서 run 실행시 jvm 에 대한 세팅은 어디서 하나요?  (0) 2007.11.28
james mail server  (0) 2007.11.28
[펌] james mail server setting  (0) 2007.11.28
[펌] JUnit 설정  (0) 2007.11.28

james mail server

프로그래밍/Library 2007. 11. 28. 09:30 Posted by galad

★ E-mail 보내기

http://james.apache.org/ 에서 james 메일 서버 다운로드
* C:\james 에 압축을 풀고 C:\james\bin 의 run.bat 파일을 실행
* James 환경 설정
– C:\james\apps\james\SAR-INF의 config.xml 파일 변경
사용자의 아이디와 암호를 변경 - <account login="itea" password="itea"/>
메일 서버 설정 - <servername>61.109.232.158</servername>
DNS 서버 지정
-  <dnsserver>
<servers>
<server>168.126.63.1</server>
<server>168.126.63.2</server>
<server>61.109.232.158</server>
<server>127.0.0.1</server>
</servers>
<autodiscover>true</autodiscover>
<authoritative>false</authoritative>
</dnsserver>
* config.xml 파일을 변경한 후 james 서버를 실행
* 메일 사용자 계정을 만들기 위해 명령어 창에서 이렇게 입력해서 james 서버에 연결
C:\> telnet localhost 4555
* 새로운 메일 계정을 만들기 위해서 이렇게 한다.
로그인을 한 다음,
adduser 아이디 비번  이렇게 입력하면 새로운 메일 계정이 생성됨.
 프로젝트 때는 ID: itea PW: itea 로 통합해서 사용하겠음.
* 메일을 전송하고 읽기 위해서 라이브러리 다운로드
http://java.sun.com/products/javamail/ 에서 JavaMail 위한 라이브러리 다운로드
압축을 풀고 mail.jar 파일을 j2SDK/jre/lib/ext 와 Tomcat/common/lib 에 복사
http://java.sun.com/products/javabeans/glasgow/jaf.html 에서 JAF 라이브러리 다운로드
압축을 풀고 activation.jar 파일을 j2SDK/jre/lib/ext 와 Tomcat/common/lib에 복사
톰캣 다시 시작

ps.

<authorizedAddresses>127.0.0.0/8, 61.109.232.*</authorizedAddresses>
메일 전송 권한 설정 - D:\www\james-2.2.0\apps\james\SAR-INF\config.xml 에서...

위의 속성을 없애면 아무나 메일을 보낼 수 있다. 즉, 스팸 메일 서버 등으로 사용가능해짐 ㅡ.ㅡ;;

[펌] james mail server setting

프로그래밍/Library 2007. 11. 28. 09:29 Posted by galad

http://blog.naver.com/galad/140033607909

출처 블로그 > もも***
원본 http://blog.naver.com/dmsl01/80033518048

 

james mail server setting

 

 


0. 실행 환경 2000 서버, Tomcat4.1.30, JDK1.4.3


1. http://james.apache.org/download.cg에 가서 실행파일을 받아 온다.
   Avalon Phoenix라는 것이 필요하다는 말이 있는데 실행 파일을 받아오면 그 안에 다 있는   

   것 같습니다. 그러니 따로 받지 않아도 됩니다.


2. 적당한 폴더에 압축을 풀고 james-2.1.3\bin 밑에 있는 run.bat를 실행시키십시요.
   물론 그전에 JDK는 설치가 되어 있어야 합니다. 실행이 되고 나면 Dos창이 하나 뜨는데 일

   단은 강제 종료를 시키십시요.


3. Dos창을 종료하고 james-2.1.3\apps 폴더를 보면 james라는 폴더가 생겨있을 겁니다.


4. james-2.1.3\apps\james\SAR-INF 폴더에 가서 보면 config.xml이라는 파일이 있는데

   이게 설정 화일입니다.


5. 에디터에서 그 파일을 열어 보면 여러가지 것들을 설청 할수 있습니다.
  

   5-1. 28번 줄에 <postmaster>Postmaster@abc.com</postmaster>으로 수정하세요.
         왜 그러는지는 알수 없지만 나중에 메일 서버를 관리 할때 필요
   5.2. 49번 줄에 <servername>abc.com</servername>으로 수정하세요.
         여기서 서버이름에 mail.abc.com으로 하시면 메일을 보낼때 메일 주소를

         user_id@mail.abc.com으로 해야 메일이 들어 오더라구요.
   5-3. <dnsserver>
          <servers>
          <!-- CONFIRM? -->
            <!--Enter ip address of your DNS server, one IP address per server -->
            <!-- element.  The default configuration assumes a DNS server on the localhost.

             -->
            <server>000.000.000.000</server>
          </servers>
          <authoritative>false</authoritative>
        </dnsserver> 부분을 수정하세요.
          메일 서버 James가 설치된 서버의 IP를 적으시면 됩니다.
   5-4. <remotemanager><remotemanager/>부분의 login/password가 있습니다. 자신이 원

         하는 ID와 패스로 수정하세요.
         나중에 유저를 관리할때 필요합니다.


6. james-2.1.3\bin 밑에 있는 run.bat를 다시 실행시키십시요. 다음과 같은 메시지가 나오면

   성공입니다.
     Using PHOENIX_HOME:   C:\james213\james-2.1.3
     Using PHOENIX_TMPDIR: C:\james213\james-2.1.3\temp
     Using JAVA_HOME:

     Phoenix 4.0.1

     James 2.1.3
     Remote Manager Service started plain:4555
     POP3 Service started plain:110
     SMTP Service started plain:25
     NNTP Service started plain:119
     Fetch POP Disabled


7. Dos창을 하나 더 띄우세요. 그리고 telnet abc.com 4555로 접속하면

   <remotemanager><remotemanager/>부분에서 정의한 ID로 접속하시면 됩니다.
   접속에 성곡하면 adduser test 1234같이 사용자를 추가 하세요.

   help를 치시면 도움말이 나옵니다.


8. outlook express 에서 메일 계정을 등록한 후에 테스를 해보시면 됩니다.


9. spoolmanager, Matchers, Mailets, DB접속은 아직 테스트 못해 봤습니다.



                                                                                                                           





1. 다운로드 및 설치
   우선 James를 받습니다...
   받을곳은 http://mirror.apache.or.kr/jakarta/james/binaries/
   여기서 james-2.1.3.zip를 받습니다
   받은다음 아무곳에나 압축을 풀고 james/bin 디렉토리에 run.bat를 실행하면

   Phienix 4.0.1이 먼저 가동되고 James 2.1.3이 실행되었다고 나옵니다..


2. 사용자 추가
   James를 가동한걸 잘 보면 Remote Manager Service Started plain:4555 라고 나올걸 볼

   수 있습니다.
   여기가 admin콘솔. 텔넷으로 접속합니다.
   명령 프롬프트에서 telnet localhost 4555 라고 치면 아이디랑 패스워드 넣으라고 나옵니

   다. 디폴트로 root/root로 잡혀있어요. 이거를 넣으면 Welcome root HELP for list 라고

   나옵니다.
  여기서 adduser [사용자 이름] [패스워드] 라고 치면 User [사용자이름] added 라는 메세

  지가 나옵니다. 추가된걸 확인하려면 listusers 라고 치면 됩니다.


3. 메일보내기/받기
   아웃룩에서 새로운 계정을 만듭니다.메일주소는 [사용자이름]@localhost
   POP3는 localhost , SMTP도 localhost, 사용자랑 비번은 아까 추가한 그걸로 넣으면 됩니

   다.그리고 테스트해보세요.


4. 설정하기
   James홈 밑에 app/james/SAR-INF/config.xml화일이 있읍니다..이게 설정화일입니다.

   28번째줄 정도에 보시면 <postmaster>admin@localhost</postmaster> 에서
   localhost대신에 도메인 네임을 적으시면 되고요~~
   49번째줄 정도에 보시면 <servername>localhost</servername> 에서 바꿔주심 돼 요.

   368번째줄 정도에 보시면
            <!-- Change the default login/password. -->
            <account login="root" password="root"/>
   이부분이 있는데 여기가 아까 어드민콘솔에 들어갈때 아이디랑 패스워드 입니다.



'프로그래밍 > Library' 카테고리의 다른 글

Tomcat 다운현상  (0) 2007.11.28
james mail server  (0) 2007.11.28
[펌] JUnit 설정  (0) 2007.11.28
CVS 설치 후, 사용자 추가하기  (0) 2007.11.28
cmd here!  (0) 2007.11.27

[펌] JUnit 설정

프로그래밍/Library 2007. 11. 28. 09:28 Posted by galad
출처 블로그 > もも***
원본 http://blog.naver.com/dmsl01/80033532103

 

[이클립스에서 JUnit 설정]

 

1. 상단 메뉴에서 [Window] -> [Preference] 를 선택한 다음, 좌측 트리에서 [Java]를 클릭한 다음 아래 생성된 [Junit] 클릭하여 JUnit 기본 설정을 변경할 수 있다.



[이클립스에서 JUnit 테스트]

 

1. [Package Explorer] 에서 소스가 위치한 소스폴더 또는 패키지에서 팝업메뉴를 띄운 다음 [New] -> [Other] 를 선택

2. 화면에 나타난 다이얼로그에서 [Java] -> [JUnit] -> [JUnit Test Case]를 선택

3. 화면에 나타난 메뉴 중단의 [Name] 항목에 새로운 JAVA 파일명을 입력하고, 하단의 [Class Under Test] 항목에는 테스트하고자 하는 JAVA 파일명을 입력한다.

4. 새로 나타난 화면에서 테스트 하고자 하는 메소드를 선택하여 체크한 다음 [Finish]버튼 클릭

5. 소스 창에 탬플릿이 생성된 것을 볼 수 있으며, 주어진 템플릿을 이용하여 코딩한다.

6. 소스 작성이 마무리 되면, 해당 소스를 선택한 다음, 팝업 메뉴에서 [Run] -> [Junit Test]를 클릭하면 테스트 내용을 [Junit] Perspective로 나타난다.


* JUnit Test Suite의 경우에도 위와 동일한 방식으로 템플릿 생성 및 테스트가 가능하다.

'프로그래밍 > Library' 카테고리의 다른 글

Tomcat 다운현상  (0) 2007.11.28
james mail server  (0) 2007.11.28
[펌] james mail server setting  (0) 2007.11.28
CVS 설치 후, 사용자 추가하기  (0) 2007.11.28
cmd here!  (0) 2007.11.27

1. CVS에서 사용할 디렉토리를 설정해줘야 한다.
Repository 라는 영역과 Temporary 라는 영역을 설정해 줘야 하는데

Temporary는 일반적인 임시파일을 쓸 경로로 지정해주면 되고
Repository는 CVS서버 하위의 저장공간이라고 생각하면 된다.

(각각의 Repository는 독립적인 경로를 가지게 되며 하위에 여러가지 모듈을

가지며 로그인 가능한 사용자등도 따로 가지게 된다.)


주의 Repository 와Temporary는 C:₩Documents and Settings₩ 하위 디렉토리에 설정을 하면 안된다.
(권한 관련한 문제가 생김)


2. 이제 CVS Conrtol Panel을 실행시켜

우선 CVSNT Service와 CVSNT Lock Service 를 멈춰준다.
Server Settings 탭으로 이동한후

Temporary를 설정해 준다.
Repository configuration 탭으로 이동후

Location 에 적당한 폴더를 설정한다.
Name 의 경우 외부에서 CVS에 접속을 할때 Repository를 선택할수 있는 이름을 나타낸다.

 

3. 이제 CVS의 각 Repository에 접속가능한 유저계정을 생성해야 한다.
이것은 윈도우의 계정을 설정할수도 있고 하나의 윈도우 계정을 사용하는 자체 cvs 계정을 생성할수도 있다.
물론 실제로 사용되는 윈도우 계정이 위에서 설정했던 디렉토리에 접근권한이 있어야 한다.
Administrator 를 cvs에서 사용하는 윈도우 계정으로 하고 사용자 계정을 만들어보면
윈도우의 시작 -> 실행 에서 cmd 를 입력하고 엔터를 눌러 커맨드 창을 띄운다.
프롬프트에서 cvs를 입력해 본다.
여기서 실행파일을 찾을수 없다는 메세지가 나오면 CVSNT를 설치하면서 정상적으로 PATH가 설정되지 않은 경우다. 이 경우는 환경변수(제어판->시스탬->고급->환경변수)의 PATH에 CVSNT가 설치된 디렉토리를 추가 시켜준다.
cvs에 정상적으로 접근을 하기위해서는 CVSROOT 라는 환경변수가 설정이 되어있어야 하므로 프롬프트 창에서
set CVSROOT=:pserver:Administrator@127.0.0.1:/SSA
를 입력한다. 위의 127.0.0.1 이 접속하려는 서버의 주소다.
그 앞의 Administrator 가 접속하려는 계정이고 가장 뒤의 /SSA는 위에서 설정해준 Repository 의 이름이다.
이제 로그인을 위해서 프롬프트 창에
cvs login
을 입력하고 해당계정의 패스워드를 입력한다.
정상적으로 로그인이 되면 아무메세지 없이 프롬프트로 돌아오며 이제 유저를 추가하면 된다.
cvs passwd -r Administrator -a yoway
을 입력하면 yoway 라는 계정을 추가하게 되며 CVS로 yoway 라는 계정으로 user가 로그인을 하면 윈도우의 Administrator 계정을 사용해서
CVS서버내의 리소스 접근권한을 제어하게 된다.


!! 위 처럼 해도 안되는 경우가 많다. 그 때는 새로이 cmd창을 열어서


C:\Documents and Settings\Administrator>set CVSROOT=:pserver:Administrator@127.0.0.1:/blog


C:\Documents and Settings\Administrator>cvs -d d:/www/CVS/blog passwd -r Administrator -a itea
Adding user itea
New Password:
Verify Password:


이것 처럼 한다


4. admin 권한주기
Repository 로 설정한 디렉토리의 CVSROOT 디렉토리 안에 admin 파일을 생성하고 각 줄에 하나씩 아이디를 적어주면 해당 아이디가 admin 권한을 가지게 된다.

5. 첨언
● Repository 는 각각이 source safe 에서 하나의 서버라고 생각하면 된다. 각각의 Repository 는 서로 다른 유저계정을 관리하므로 서로 다른팀, 완전히 독립된 프로젝트 등을 하나의 Repository 로 구분하는것이 좋다.
● 설치해서 Repository 를 설정하고 유저를 추가하는것 까지만 해두면 나머지 실제 모듈을 생성하고 소스를 올려두는것은 클라이언트 단에서 처리가 가능하다. 괜히 비어있는 Repository 에 소스를 올리고 할 필요는 없다.
● 방화벽이 있으면 외부에서 CVS에 접속을 할수가 없으므로 TCP 2401포트와 2402포트를 열어둬야 한다.

'프로그래밍 > Library' 카테고리의 다른 글

Tomcat 다운현상  (0) 2007.11.28
james mail server  (0) 2007.11.28
[펌] james mail server setting  (0) 2007.11.28
[펌] JUnit 설정  (0) 2007.11.28
cmd here!  (0) 2007.11.27

[펌] Javascript TRIM(공백제거)

프로그래밍/Web 2007. 11. 28. 09:17 Posted by galad
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
return this.replace(/\s+$/,"");
}


// example of using trim, ltrim, and rtrim
var myString = " hello my name is ";
alert("*"+myString.trim()+"*");
alert("*"+myString.ltrim()+"*");
alert("*"+myString.rtrim()+"*");
1. 만들기
1)
    var re=/pattern/flags;

2)
    var re=new RegExp("pattern","flags");

3) 차이 - new로 만들때에는 이스케이프문자는 \는 \\로 해주어야 한다.
    var re=/\w/;
    var re=new RegExp("\\w");

2. 플래그(flag)
  • g (Global 찾기) 패턴에 맞는 모든문자 찾기
  • i (Ignore Case) 대소문자 무시
  • m (Multiline) 여러줄
3.
  • ^ 문자열의 시작을 의미 ,m 플래그를 사용할경우 경우는 각 문자열의 시작
  • $ 문자열의 끝을 의미 ,m 플래그를 사용할경우 경우는 각 문자열의 끝
  • . 모든 한문자
4.
  •     [문자들]  - 괄호안의 문자 하나와 매치
            예) [abc] 는 a나 b나 c중 하나를 의미

  •     [^문자들] - 괄호안의 문자가 아닌문자와 매치
            예) [^abc] 는 1,2.... d,e.... 등과 매치

  •     [문자1-문자2] - 문자1과 문자2와 그 사이의 값과 매치
           예) [a-d] a,b,c,d와 매치    
5. (abc) abc와 매치

6.
|
   
좌우 패턴중 하나를 의미
        예) (abc|def) abc나 def를 의미

7. *, +, ?
        *  앞의 패턴이 0회 또는 그 이상반복됨
        +  앞의 패턴이 1회 또는 그 이상반복됨
        ?  앞의 패턴이 0또는 1회 반복

8. {n}, {n,}, {n,m} 패턴의 반복회수

    예)
        (abc){1,3} abc가 1에서 3회 반복
        (abc){1} abc가 1회반복
        (abc){,10} abc가 10회 이하 반복



9. 특수문자 (Escapes Character)

\ 일반문자에 \을 붙여서 특수한 용도로 사용한다.
\f 폼피드(?)
\r 캐리지리턴
\n 새줄
\t 일반 탭문자
\v 세로 탭문자(?)
\0 NUL널문자
[\b] 백스페이스
\s 공백문자
    \f, \n, \r, \t, \v, \u00A0, \u2028, \u2029
\S 공백이아닌문자
\w 알파벳문자,숫자,_ [a-zA-Z0-9_]
\W 알파벳문자,숫자,_가 아닌문자 [^a-zA-Z0-9_]).
\d 정수(short for [0-9]).
\D 정수가 아닌 문자 (short for [^0-9]).
\b 단어의 경계 공백,새줄.
\B 경계가 아닌문자.
\cX 컨트롤+문자 E.g: \cm matches control-M.
\xhh 핵사코드
\uhhhh 유니코드
출처 블로그 > 호이야~ 공부하자.
원본 http://blog.naver.com/ahnwhan76/100011474330

<HTML>
<HEAD>
<script>
 function submitonce(theform){
  if (document.all||document.getElementById){
   for (i=0;i<theform.length;i++){
    var tempobj=theform.elements[i]
     if(tempobj.type.toLowerCase()=="submit"||tempobj.type.toLowerCase()=="reset")
      tempobj.disabled=true
   }
   setTimeout('alert("전송되었습니다")',2000)
  }
  else
   alert("전송되었습니다")
  return false
 }
</script>
</HEAD>

<BODY>
<form method="POST" name="test" onSubmit="return submitonce(this)">
<table border="0" cellspacing="5" cellpadding="0">
 <tr>
  <td><strong><font face="Verdana">이름:</font></strong></td>
  <td><input type="text" name="T1" size="20"></td>
 </tr>
 <tr>
  <td valign="top" align="left"><strong><font face="Verdana">내용: </font></strong></td>
  <td><textarea rows="6" name="S1" cols="30"></textarea></td>
 </tr>
 <tr>
  <td><div align="center"></div></td>
  <td align="center"><div align="left"><p><input type="submit" value="확인" name="B1"> <input type="reset" value="다시" name="B2"></td>
 </tr>
</table>
</form>
</BODY>
</HTML>

[펌] 각종 폼양식 체크하기

프로그래밍/Web 2007. 11. 28. 09:14 Posted by galad

http://blog.naver.com/galad/140036840746

출처 블로그 > 쿠마네집
원본 http://blog.naver.com/turbo1117/30002699224
              

<!--

// radio 또는 checkbox가 배열또는 특정문자열의 반복으로 구성된 값을 넘길때 submit()

// 체크된 값은 "y", 그렇지 않은 값은 "n"을 넘긴다.

// ex) <input type='checkbox' name='chkVal_1'>

function fSubmit() {

   var f=document.form;

   for (var i=0; i<f.elements.length; i++) {

      if (f.elements[i].name.substr(0,6) == 'chkVal') {

         if (f.elements[i].checked == false) f.elements[i].value = 'n';

         else f.elements[i].value = 'y';

      }

   }

   f.submit();

}


// 팝업을 오픈한 동시에 부모창에서 팝업으로 submit

// <form name='fm'>에서 실행시켜 result.html로 넘긴다

function popSubmit(f) {

   var pop=window.open("","pop_submit","top=10,left=10,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=200,height=200);

   f.method = "post";

   f.action = "result.html";

   f.target = "pop_submit";

   f.submit();

   pop.focus();

}


// 부모창의 값을 특정스크립트(result.html)에 넘긴다(팝업이 parent를 조절)

function parentSubmit(f) {

   f.method = "post";

   f.action = "result.html";

   f.target = "_self";

   f.submit();

   self.close();

}


// 한 페이지에 선택될 갯수를 저장할 전역변수

// 한 페이지에 최대 4개를 선택한다.

var Select_Count = 0;

// onClick 이벤트실행시 수행되며 onChange 이벤트에서 이전값을 저장하기위한 전역변수

var Click_Value;


// 노출 radio 버턴의 패턴을 바꿀때

function DisplayChange(card_id,val) {

   var opt=eval("document.form.chkDisplay_"+card_id);

   var sel=eval("document.form.chkSelect_"+card_id);

   var ordText=eval("OrderText_"+card_id);


   for (var i=0; i<opt.length; i++) {

      if ((opt[i].checked == true) && (val == 1)) {

         if (Select_Count >= 4) {

            alert('Over !!!');

            opt[i].checked = false;

            opt[i].checked = true;

            return;

         }

         sel.style.color='#c4018a';

         sel.style.background.color='#f8f7f7';

         sel.disabled = false;

         if (sel.options[sel.selectedIndex].value > 0) {

            ordText.style.display='';

            Select_Count++;

         } else ordText.style.display='none';

      } else if ((opt[i].checked == false) && (val == 0)) {

         sel.disabled = true;

         ordText.style.display='none';

         if (sel.options[sel.selectedIndex].value > 0) Select_Count--;

         ordText.style.display='none';

      }

      break;

   }

}


// select 값이 바뀌면 실행되는 루틴

function OrderChange(card_id) {

   var sel=eval("document.form.chkSelect_"+card_id);

   var ordText=eval("OrderText_"+card_id);

   if (sel.value == 0) {

      Select_Count--;

      ordText.style.display='none';

      return;

   } else {

      if (Select_Count < 4) {

         if (Click_Value > 0) return;

         else {

            Select_Count++;

            ordText.style.display='';

            return;

         }

       } else {

          if (Click_Value > 0) return;

          else {

             alert('Over !!!');

             sel.value=Click_Value;

             return;

          }

        }

     }

}


// select 박스를 클릭하면 실행되는 루틴(전역변수에 현재 클릭된 값을 저장한다)

function OrderClick(card_id) {

   var sel=eval("document.form.chkSelect_"+card_id);

   Click_Value = sel.value;

}

 

// 파일 체크박스가 1개라도 체크되어 있으면 true 리턴
 function check_confirm(){
       
  objForm = document.frmFile;
        var count = 0;
        if (objForm.chk != undefined){
         var length = objForm.chk.length;
         if(length > 1){    //체크박스가 여러개 일경우
             for(var i=0; i<length; i++){
                 if(frmFile.chk[i].checked)
                     count++;
             }
         }else{    //체크박스가 한개일경우
             if(frmFile.chk.checked)
                 count++;
         }
        }       
        return count;
 }

// 최상위 체크 로직(chars로 넘긴 값이 있다면 true)

    function containsCharsOnly(input,chars) {

        for (var inx = 0; inx < input.value.length; inx++) {

            if (chars.indexOf(input.value.charAt(inx)) == -1)

                return false;

        }

        return true;

    }

 

 

// 최상위 체크 로직(chars로 넘긴 값이 있다면 false)

 function containsChars(input,chars) {

     for (var inx = 0; inx < input.value.length; inx++) {

        if (chars.indexOf(input.value.charAt(inx)) != -1)

            return true;

     }

     return false;

 }

 

 

 

// 숫자 체크

    function isNum(input) {

        var chars = "0123456789";

        return containsCharsOnly(input,chars);

    }

 

 

 

// 이름체크

 function nameCheck(input){

  var chars = '0123456789~!@#$%^&*()_-+=|{}[]<>,./?';

        return containsChars(input,chars);

 }

 

 

 

// 전화 번호 Check

    function isPhoneCheck(input) {

     var chars = "0123456789( ).-,<>{}[]_~";

        return containsCharsOnly(input,chars);

    }

 

 

 

// 영문 판별

    function isPhoneCheck(input) {

     var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

        return containsCharsOnly(input,chars);

    }

 

 

 

// 영숫자 판별

    function isPhoneCheck(input) {

     var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        return containsCharsOnly(input,chars);

    }

 

 

 

 // 입력값이 숫자,대시(-)로 되어있는지 체크

 function isNumDash(input) {

     var chars = "-0123456789";

     return containsCharsOnly(input,chars);

 }

 

 

 

 // 입력값이 숫자,콤마(,)로 되어있는지 체크

 function isNumComma(input) {

     var chars = ",0123456789";

     return containsCharsOnly(input,chars);

 }

 

 

 

 // 입력값이 사용자가 정의한 포맷 형식인지 체크

 // 자세한 format 형식은 자바스크립트의 ''regular expression''을 참조

 function isValidFormat(input,format) {

     if (input.value.search(format) != -1) {

         return true; file://올바른 포맷 형식

     }

     return false;

 }

 

 

 

 /**

  * 입력값이 이메일 형식인지 체크

  * ex) if (!isValidEmail(form.email)) {

  *         alert("올바른 이메일 주소가 아닙니다.");

  *     }

  */

 function isValidEmail(input) {

 //    var format = /^(\S+)@(\S+)\.([A-Za-z]+)$/;

     var format = /^((\w|[\-\.])+)@((\w|[\-\.])+)\.([A-Za-z]+)$/;

     return isValidFormat(input,format);

 }

 

 

 

 /**

  * 입력값이 전화번호 형식(숫자-숫자-숫자)인지 체크

  */

 function isValidPhone(input) {

     var format = /^(\d+)-(\d+)-(\d+)$/;

     return isValidFormat(input,format);

 }

 

 

 

 // 콤마 없애기

 function removeComma(input) {

     return input.value.replace(/,/gi,"");

 }

 

 

 

 // 문자 변환 함수

    function alterString(str,before,after) {

     var returnStr = "";

     for(i = 0; i < str.length; i++) {

      value = str.charAt(i);

      index = before.indexOf(value);

      if(index >= 0) value = after.charAt(index);

      returnStr += value;

     }

     return returnStr;

    }

 

 

 

// --> 대문자 변환 함수

    function ToUpper(arg) {

     var str1 = "abcdefghijklmnopqrstuvwxyz";

     var str2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

     return alterString(arg,str1,str2);

    }

 

 

 

// --> 소문자 변환 함수

    function ToLower(arg){

     var str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

     var str2 = "abcdefghijklmnopqrstuvwxyz";

     return alterString(arg,str1,str2);

    }

 

 

 

// 반각 문자를 전각문자로

    function convert2ByteChar(x_char) {

        var x_2byteChar = ""; //컨버트된 문자

        var c = x_char.charCodeAt(0);

        if(32 <= c && c <= 126) { //전각으로 변환될수 있는 문자의 범위

            if(c == 32) { //스페이스인경우 ascii 코드 32

                x_2byteChar = unescape("%uFFFC");

            } else {

                x_2byteChar = unescape("%u"+gf_DecToHex(c+65248));

            }

        }

        return  x_2byteChar;

    }

 

 

 

// 10진수를 16진수로

    function gf_DecToHex(x_dec) {

        var x_Hex = new Array();

        var x_serial = 0;

        var x_over16 = x_dec;

        var x_tempNum = 0;

        while(x_dec > 15) {

            var x_h = x_dec % 16;          //나머지

            x_dec = parseInt(x_dec/16); //

            x_Hex[x_serial++] = (x_h > 9 ? String.fromCharCode(x_h + 55) : x_h); //16진수코드변환

        }

 

 

 

    //마지막은 몫의 값을 가짐

        x_Hex[x_serial++] = (x_dec > 9 ? String.fromCharCode(x_dec + 55) : x_dec); //16진수코드변환

  

    //,나머지,나머지,.....

        var retValue = "";

        for(var i=x_Hex.length ; i>0 ;i--) {

            retValue += x_Hex[i-1];

        }

        return retValue;

    }

 

 

 

// input box space, &nbsp;등 만으로 넣고 장난 칠때 이들 문자 뺀 길이를 통해 유효성 체크한다...

    function CheckStr(strOriginal, strFind, strChange){

        var position, strOri_Length;

        position = strOriginal.indexOf(strFind); 

        while (position != -1){

            strOriginal = strOriginal.replace(strFind, strChange);

            position = strOriginal.indexOf(strFind);

        }

        strOri_Length = strOriginal.length;

        return strOri_Length;

    }

 

 

 

// 체크 박스에 체크가 되어 있으면 true

 function checkValidator(str) {

  if(str.checked) return true;

  else return false;

 }

 

 

 

 // 비밀번호는 4자 등 최대 최소 길이를 파람으로 주고 처리...

    function checkLength(str,minLng,maxLng){

        var ckstr = str.value.length;

        if (parseInt(ckstr) < parseInt(minLng) || parseInt(ckstr) > parseInt(maxLng)) return false;

        return true;

    }

 

 

 

// 숫자만 받아서 아니면 메세지 보여 주는

    function onlyNumber(objEv) {

        if(!isNum(objEv)){

            alert("숫자만 입력가능합니다.");

            objEv.value = "";

            objEv.focus();

            return;

        }

    }

 

 

 

// 숫자를 체크하다가 6자 등 원하는 만큼 이동후 다음 input 박스로 이동 시키는...

    function goJump(fname, len, goname){

        onlyNumber(fname);

        if (document.all[fname].value.length == len) document.all[goname].focus();

    }

 

 

 

// 주민등록번호 체크 로직

    function check_ResidentNO(str_f_num,str_l_num){ 

        var i3=0

        for (var i=0;i<str_f_num.length;i++){

         var ch1 = str_f_num.substring(i,i+1);

            if (ch1<'0' || ch1>'9') i3=i3+1;

        }

        if ((str_f_num == '') || ( i3 != 0 )) return false;

        var i4=0;

        for (var i=0;i<str_l_num.length;i++){

            var ch1 = str_l_num.substring(i,i+1);

            if (ch1<'0' || ch1>'9') i4=i4+1;

        }

        if ((str_l_num == '') || ( i4 != 0 )) return false;

        if(str_f_num.substring(0,1) < 4) return false;

        if(str_l_num.substring(0,1) > 2) return false;

        if((str_f_num.length > 7) || (str_l_num.length > 8)) return false;

        if ((str_f_num == '72') || ( str_l_num == '18'))  return false;

               

        var f1=str_f_num.substring(0,1)

        var f2=str_f_num.substring(1,2)

        var f3=str_f_num.substring(2,3)

        var f4=str_f_num.substring(3,4)

        var f5=str_f_num.substring(4,5)

        var f6=str_f_num.substring(5,6)

        var hap=f1*2+f2*3+f3*4+f4*5+f5*6+f6*7

        var l1=str_l_num.substring(0,1)

        var l2=str_l_num.substring(1,2)

        var l3=str_l_num.substring(2,3)

        var l4=str_l_num.substring(3,4)

        var l5=str_l_num.substring(4,5)

        var l6=str_l_num.substring(5,6)

        var l7=str_l_num.substring(6,7)

        hap=hap+l1*8+l2*9+l3*2+l4*3+l5*4+l6*5

        hap=hap%11

        hap=11-hap

        hap=hap%10

        if (hap != l7) return false;

        return true;

    }

 

 

 

// 바이트 구하기

    function getByteLen(str){

        return(str.length+(escape(str)+"%u").match(/%u/g).length-1);

    }

 

 

 

 // url 가져오기

    function getUrlAddress(){

        var pageUrl = document.location;

     pageUrl  = new String(pageUrl);

      return pageUrl.substring(0,pageUrl.lastIndexOf("/"));

    }

 

 

 

// 오른마우스 금지, 나중에 해당 주석 풀고 사용

    function rightbutton(e){

        if (navigator.appName == 'Netscape' &&  (e.which == 3 || e.which == 2))

            return false;

        else if (navigator.appName == 'Microsoft Internet Explorer' && (event.button == 2 || event.button == 3))

        {

            alert("죄송합니다!! 정보무단복제를 막기 위하여 오른쪽 마우스 사용을 허용하지 않습니다.");

            return false;

        }

        return true;

    }

 

 

 

//document.onmousedown=rightbutton;

 

// 컨트롤 키 금지, 나중에 해당 주석 풀고 사용

    function checkCtl(){

        if (document.all){

            if(event.keyCode==17) {

                alert("죄송합니다!! 컨트롤키 사용을 허용하지 않습니다.");

                return false;

            }

        }

    }

 

 

 

//document.onkeydown = checkCtl;

 

 function setCookie(name,value) {

     document.cookie = name+"="+escape(value)+";path=/;domain=.kkaok.pe.kr;";

 }

 

 function setCookie(name,value, expires) {

     document.cookie = name + "=" + escape(value) +

     "; path=/; expires=" + expires.toGMTString();

 }

 

 function getCookie(Name) {

     var search = Name + "="

     if (document.cookie.length > 0) { // 쿠키가 설정되어 있다면

         offset = document.cookie.indexOf(search)

         if (offset != -1) { // 쿠키가 존재하면

             offset += search.length

         // set index of beginning of value

             end = document.cookie.indexOf(";", offset)

         // 쿠키 값의 마지막 위치 인덱스 번호 설정

             if (end == -1)

                 end = document.cookie.length

             return unescape(document.cookie.substring(offset, end));

         }

     }

 }

 

 

 

    String.prototype.trim = function(){

        return this.replace(/(^\s*)|(\s*$)/gi, "");

    }

 

//문자 바꾸기, 사용법 var str = 문자열.replaceAll("a", "1"); 

    String.prototype.replaceAll = function(str1, str2) {

        var temp_str = "";

        if (this.trim() != "" && str1 != str2) {

            temp_str = this.trim();

            while (temp_str.indexOf(str1) > -1){

                temp_str = temp_str.replace(str1, str2);

            }

        }

        return temp_str;

    }

 

//-->

[펌] 문자열과 수식 - eval()

프로그래밍/Web 2007. 11. 28. 09:13 Posted by galad
출처 블로그 > !! 희망의 섬 !!
원본 http://blog.naver.com/dreamkss/120020812255

**********************************************************

** 문자열과 수식

**********************************************************


자바스크립트에서 문자열과 수식을 혼함해서 사용하기 위해서는

java문법과 달리 함수를 사용해야 한다. 그렇지 않을 경우 정상적인

값을 얻을 수 없을 뿐만 아니라 오류로 뻘짓거리만 할 수 있다. ㅠㅠ


문자열속에서 반복문(for)을 이용하여 변하는 값을 계속해서 만들어

내기 위해 사용되는 함수는 eval() 함수이다.


-- 사용법

for (i = 0; i < 5; i++) {

   var name = eval("내 이름은 행인" + (i+1));

   alert(name);

}


이와 같이 반복되는 문자열속에 변경 되어야 하는 값이 존재할 경우

eval() 함수를 사용하여 그 값이 변화함을 적용해 줄 수 있다.


http://blog.naver.com/galad/140036840702

출처 블로그 > 임대형쇼핑몰정보
원본 http://blog.naver.com/makeshop01/150007356268
<input style="text-transform:uppercase;" size=10 value="" maxlength=255>


input 태그 내에 아래와 같이 스타일을 지정해주면 됩니다.

style="text-transform:uppercase;"

'프로그래밍 > Web' 카테고리의 다른 글

[펌] 각종 폼양식 체크하기  (0) 2007.11.28
[펌] 문자열과 수식 - eval()  (0) 2007.11.28
[펌] html 색상표  (0) 2007.11.28
[펌] alert 알림창 과 confirm 선택창  (0) 2007.11.28
[펌] 자바스크립트의 모든것  (0) 2007.11.28

[펌] html 색상표

프로그래밍/Web 2007. 11. 28. 09:12 Posted by galad
출처 블로그 > 일곱빛깔 맛있는 사랑♡"R"
원본 http://blog.naver.com/ghtjs18/90003744992
2f4f4f darkslategray 어두운푸른빛 회색
708090 slategray 푸른빛회색
778899 lightslategray 밝은푸른빛 회색
696969 dimgray 칙칙한회색
808080 gray 회색
a9a9a9 darkgray 어두운회색
c0c0c0 silver 은색
d3d3d3 lightgrey 밝은회색
dcdcdc gainsboro
ffffff white 백색
fff5ee seashell 바다조가비
fffafa snow 설백
f8f8ff ghostwhite 허깨비백색
fffaf0 floralwhite 꽃의백색
f5f5f5 whitesmoke 백색연기
f0f8ff aliceblue 엷은잿빛바탕에푸른빛
f0ffff azure 하늘색
fdf5e6 oldlace 낡은끈
f5fffa mintcream 박하크림
ffefd5 papayawhip 열대아메리카산과수 매질
ffdab9 peachpuff 복숭아빛불기
faf0e6 linen 리넨
eee8aa palegoldenrod 옅은국화과의 다년초
ffe4e1 mistyrose 짙은장미빛
ffe4b5 moccasin 사슴가죽의구두
ffdead navajowhite 나바호족백색
d2b48c tan 볕에탄빛깔
f5deb3 wheat 밀
fafad2 lightgoldenrodyellow 밝은국화과다년초노랑
ffffe0 lightyellow 밝은노랑
fff8dc cornsilk 옥수수명주실
faebd7 antiquewhite 옛날의백색
f5f5dc beige 엷은갈색
fffacd lemonchiffon 레몬빛가볍고얇 은직물
fffff0 ivory 상앗빛
f0e68c khaki 누른빛에엷은다색이섞인빛깔
e6e6fa lavender 연한자주색
fff0f5 lavenderblush 연한자주빛붉 기
ffe4c4 bisque 분홍빛이도는검은빛을띤누른 빛
ffebcd blanchedalmond 희어진엷은 황갈색
deb887 burlywood 튼튼한목재
cd853f peru 남미서부의공화국
00ced1 darkturquoise 어두운푸른빛 녹색
00bfff deepskyblue 짙은하늘파랑
7fffd4 aquamarine 엷은푸른빛녹색
1e90ff dodgerblue옥수수빵파랑
00ffff cyan 푸른정도
f0fff0 honeydew 식물의잎에서나는단물
87cefa lightskyblue 밝은하늘파랑
afeeee paleturquoise 옅은푸른빛녹 색
e0ffff lightcyan 밝은푸른정도
add8e6 lightblue 밝은파랑
b0c4de lightsteelblue 밝은철강빛 파랑
40e0d0 turquoise 푸른빛녹색
48d1cc mediumturquoise 중간의푸 른빛녹색
00ffff aqua 엷은푸른빛녹색
7b68ee mediumslateblue 중푸른빛 회색파랑
191970 midnightblue 깜깜한파랑
6495ed cornflowerblue 옥수수꽃파 랑
0000cd mediumblue 중간의파랑
6a5acd slateblue 푸른빛회색파랑
4682b4 steelblue 철강빛파랑
0000ff blue 파랑
483d8b darkslateblue 어두운푸른빛 회색파랑
5f9ea0 cadetblue 이하의파랑
87ceeb skyblue 하늘파랑
4169e1 royalblue 황실의파랑
b0e0e6 powderblue 가루파랑
000080 navy 짙은검은빛을띤남빛
00008b darkblue 어두운파랑
8a2be2 blueviolet 파란제비꽃색
8b008b darkmagenta 어두운짙은분홍색
9932cc darkorchid 어두운연보라색
9400d3 darkviolet 어두운제비꽃색
ff00ff magenta 짙은분홍색
ff00ff fuchsia 붉은빛깔이나는자줏빛
c71585 mediumvioletred 중제비꽃 빨강
ba55d3 mediumorchid 중간의연보라색
9370db mediumpurple 중간의자줏빛
dc143c crimson 짙게붉은색깔
ff1493 deeppink 짙은연분홍색
ffb6c1 lightpink 밝은연분홍색
ff69b4 hotpink 강렬한연분홍색
ffc0cb pink 연분홍색
dda0dd plum 짙은 보라색
800080 purple 자줏빛
ee82ee violet 제비꽃색
d8bfd8 thistle 엉겅퀴
da70d6 orchid 연보라색
4b0082 indigo 남색
a52a2a brown 갈색
e9967a darksalmon 어두운주황색
f08080 lightcoral 밝은산호빛
cd5c5c indianred 인디언빨강
ffa07a lightsalmon 밝은주황색
db7093 palevioletred 옅은제비꽃빨 강
f4a460 sandybrown 엷은갈색
fa8072 salmon 주황색
ff6347 tomato 토마토색
ff4500 ornagered
ff0000 red 빨강
800000 maroon 붉은빛을띤갈색
8b0000 darkred 어두운빨강
b22222 firebrick 내화
d2691e chocolate 갈색
8b4513 saddlebrown 안장갈색
a0522d sienna 붉은빛을띤갈색
bc8f8f rosybrown 장미빛갈색
ff7f50 coral 산호빛
ff8c00 darkorange 어두운붉은빛을띤누 른색
ffa500 orange 붉은빛을띤누른색
b8860b darkgoldenrod 어둔운국화과 의다년초
ffd700 gold 금빛
ffff00 yellow 노랑
7fff00 chartreuse 연두색
7cfc00 lawngreen 잔디녹색
00ff00 lime 열대산의레몬비슷한과일
32cd32 limegreen 라임녹색
00ff7f springgreen 봄녹색
3cb371 mediumseagreen 중간의바다 녹색
adff2f greenyellow 녹색의노랑
8fbc8f darkseagreen 어두운바다녹색
90ee90 lightgreen 밝은녹색
98fb98 palegreen 옅은녹색
9acd32 yello: wgree: n
2e8b57 seagreen 바다녹색
00fa9a mediumspringgreen 중봄 녹색
20b2aa lightseagreen 밝은바다녹색
66cdaa mediumaquamarine 중엷은 청록색
228b22 forestgreen 숲녹색
008b8b darkcyan 어두운푸른정도
008080 teal 암록색을띤청색
006400 darkgreen 어두운녹색
556b2f darkolivegreen 어두운올리 브녹색
008000 green 녹색
808000 olive 물푸레나뭇과의상록교목
6b8e23 olivedrab 올리브엷은갈색
bdb76b darkkhaki 어두운누른빛에엷은다 색
daa520 goldenrod 국화과의다년초
 
 
 

출처 : http://kdaq.empas.com/knowhow/knowhow_view.html?num=2532&ps=kl&pq=cn%3D91%26lrgcd%3D1%26mdlcd%3D91%26o%3D1%26d%3D0%26p%3D23

alert 창 사용

 

비밀번호나 아이디 입력 오류시 경고정도의 메세지를 보여준다.

<a href ="javascript:del()">

펑션을 걸어주고


function del(){
   alert(" 비밀번호를 써주세요.");
}

펑션에선 무조건 alert 창이 생성된다. 간단하다.



alert 에다가 발생조건을 넣고 싶다면..


function del(){

    if (document.login.memberpw.value.length==0 ){
      alert("비밀번호를 써주세요"); document.login.memberpw.focus();return;
     }


이런식으로 사용한다.




confirm 창

 

글 삭제 클릭 시  " 삭제하시겠습니까? " 라고 물어보는데 쓰인다.

 
 

확인을 누르면 삭제가 되고 취소를 누르면 return 이 된다.


<a href ="javascript:del()">


원하는 링크에서 펑션을 걸어주자.


function del(){
   if(!confirm("삭제하시겠습니까?"))          <- 창이 생성되고
     {
     return                                             <- confirm이 ! (not) 이니까 취소 클릭시 리턴
     }
     else                                            
     document.list.action="Delete.jsp" ;     <- 확인 클릭시 삭제페이지로 넘어간다.
     document.list.submit();                     <- 폼을 서브밑 시켜서 삭제정보도 넘겨주자.
}
 
 

[펌] 자바스크립트의 모든것

프로그래밍/Web 2007. 11. 28. 09:09 Posted by galad
  • HTML에 JavaScript 삽입
    <script language="javascript">
    JavaScript Statements
    </script>

  • HTML에 JavaScript 코드 파일 삽입
    <script language="javascipt" src="src.js">
    </script>

  • 변수의 대소문자 구분
  • 변수에 포함된 데이터의 형을 지정하지 않고, JavaScript 인터프리터가 변수에 포함된 데이터 형을 추적하고 변환.
  • JavaScript 데이터 형
    • 숫 자 형 : 정수와 부동 소수
    • BOOLEAN : true, false
    • STRING : 작은 따옴표나 큰 따옴표에 들어가 있는 값으로, 특수문자 포맷 사용시에는 '\'와 함께 사용.
    • null : 아무런 값도 없는 것으로, 변수를 초기화 시키거나 어떤 값이나 이벤트를 지울 때 사용됨
    • undefined : 변수만 만들고, 값을 할당하지 않은 상태

  • 유형간의 변환
    • 스트링 피연산자가 비스트링 연산자와 사용된 경우 다른 연산자를 모두 스트링으로 변환
    • BOOLEAN값은 1과 0으로 변환되어 수치 연산을 지원
    • null값은 스트링 연산에 대해서는 "null", 논리 연산에서는 false, 그리고 수치 연산에서는 0으로 각각 변환
    • 변환 함수
      • eval() : 스트링 표현식을 수치값으로 변환하고, 파라미터가 수치형태가 아닌 스트링 값이면 에러 발생
      • parseInt() : 스트링에 포함된 첫번째 정수를 리턴하고, 스트링이 정수로 시작되지 않으면 0을 리턴
      • parseFloat() : 스트링에 포함된 첫번째 부동 소수를 리턴하거나 스트링이 적절한 부동 소수로 시작되지 않으면 0을 리턴
  • 배열 : 값의 시퀀스를 정렬할 수 있는 객체로, JavaScript의 특수형으로 배열 사용 전엔 반드시 선언해야 한다.
    • 배열 선언 예
      arrayName = new Array(arrayLength)
      arrayName = new Array()
      arrayName = new Array(value0,value1, ..., valuen)
  • JavaScript만의 특수 연산자
    • comma(,) 연산자 : 두 표현식을 계산하고, 두 번째 표현식의 값 리턴
    • delete 연산자 : 객체의 프로퍼티나 배열 인덱스의 요소 삭제하고, 항상 undefined 값 리턴
    • new 연산자 : 객체 형의 인스턴스를 만들기 위해 사용
    • typeof 연산자 : 연산자의 형을 식별하는 스트링 값을 리턴
    • void 연산자 : 값을 리턴하지 않는다
  • 지역 변수와 전역 변수 : 함수 안에서만 사용되는 것을 지역 변수라 하고, 프로그램 내에서 사용되는 변수를 전역 변수라 하는 데, 지역 변수 사용시 반드시 var 키워드와 함께 선언해야 함

     

    이벤트 처리!!


  • 이벤트 정의와 사용
    • 이벤트 : 사용자가 웹페이지나 기타 다른 브라우저에 수행한 작업으로 인한 결과
    • 이벤트 처리 : 이벤트로 인해 수행되는 프로세스
    • 이벤트 핸들러 : 프로세스를 수행하는 코드
    • 사용 예 : 사용자가 링크 위로 마우스를 갖다 대면 다이얼로그 박스를 표시한다거나, 폼에 입력한 데이터를 검증한다거나, 버튼을 클릭할 때 애니메이션을 나타내거나, Java 애플릿과 브라우저 플러그인이 상호작용을 하도록 한다.
    HTML 태그 JavaScript 이벤트 설명
    다양 mouseMove 마우스 이동
    <A>..</A> Click 마우스로 링크를 클릭
    dbClick 마우스를 링크위에서 더블클릭
    mouseDown 마우스 버튼을 누름
    mouseUp 마우스 버튼을 놓음
    mouseOver 마우스를 링크위로 이동
    mouseOut 링크 위에 있던 마우스를 링크 밖으로 이동
    keyDown 사용자가 키를 누름
    keyUp 사용자가 키를 놓음
    keyPress 사용자가 키를 눌렀다가 놓음
    <IMG> abort 사용자 액션으로 인해 이미지 로딩 작업을 중단함
    error 이미지 로딩하는 동안 에러 발생
    load 이미지가 로드되고 화면에 나타남
    keyDown 사용자가 키를 누름
    keyUp 사용자가 키를 놓음
    keyPress 사용자가 키를 눌렀다가 놓음
    <AREA> mouseOver 마우스가 클라이언트측 이미지맵의 한 영역으로 이동함
    mouseOut 마우스가 이미지맵 영역 밖으로 이동
    dbClick 사용자가 이미지맵의 한 영역을 더블클릭함
    <BODY>..</BODY> Click 사용자가 문서의 본문을 클릭
    dbClick 문서의 본문을 더블 클릭함
    keyDown 키를 누름
    keyUp 키를 놓음
    keyPress 키를 눌렀다가 놓음
    mouseDown 마우스 버튼을 누름
    mouseUp 마우스 버튼을 놓음
    <BODY>..</BODY>
    <FRAMESET>..</FRAMESET>
    <FRAME>..</FRAME>
    blur 윈도우에서 현재 입력 포커스가 사라짐
    error 윈도우가 로드되는 동안 에러 발생
    focus 입력 포커스가 현재 윈도우로 이동
    load 윈도우 로딩이 완료됨
    unload 윈도우를 종료함
    move 윈도우가 이동됨
    resize 윈도우의 크기가 바뀜
    dragDrop 윈도우에 객체를 드롭
    <FORM>..</FORM> submit 사용자가 폼을 제출
    reset 사용자가 폼을 재설정
    <INPUT TYPE="text"> blur 현재 입력 포커스가 텍스트 필드에서 사라짐
    focus 현재 입력 포커스가 텍스트 필드로 이동
    change 텍스트 필드가 변경되어 현재 입력 포커스가 사라짐
    select 텍스트 필드에 있는 텍스트가 선택됨
    <INPUT TYPE="password"> blur 패스워드 필드에서 입력 포커스가 사라짐
    focus 패스워드 필드에 입력 포커스 생김
    <TEXTAREA>..</TEXTAREA> blur 텍스트 영역이 현재 입력 포커스가 사람짐
    focus 텍스트 영역에 입력 포커스 생김
    change 텍스트 영역이 변경되어 입력 포커스가 사라짐
    select 텍스트 영역에서 텍스트가 선택됨
    keyDown 키를 누름
    keyUp 키를 놓음
    keyPress 키를 눌렀다 놓음
    <INPUT TYPE="button"> Click 버튼이 클릭됨
    blur 입력할 수 없도록 버튼이 흐려짐
    focus 입력할 수 있도록 포커스 생김
    mouseDown 버튼 위에서 왼쪽 마우스 버튼 누름
    mouseUp 버튼 위에서 왼쪽 마우스 버튼 놓음
    <INPUT TYPE="submit"> Click 제출 버튼이 클릭됨
    blur 제출 버튼에서 입력 포커스가 사라짐
    focus 제출 버튼에 입력 포커스 생김
    <INPUT TYPE="reset"> Click 리셋 버튼이 클릭됨
    blur 리셋 버튼에서 포커스가 사라짐
    focus 리셋 버튼에서 포터스가 놓임
    <INPUT TYPE="radio"> Click 라디오 버튼이 클릭
    blur 라디오 버튼에서 입력 포커스가 사라짐
    focus 라디오 버튼에 입력 포커스 생김
    <INPUT TYPE="checkbox"> Click 체크 박스가 클릭
    blur 체크 박스에서 입력 포커스가 사라짐
    focus 체크 박스에 입력 포커스 놓임
    <INPUT TYPE="file"> blur 파일 업로드 폼 요소에서 입력 포커스 사라짐
    change 사용자가 업로드될 파일을 선택
    focus 파일 업로드 폼 요소에 입력 포커스 놓임
    <SELECT>..</SELECT> blur 선택 요소가 현재 입력 포커스 잃음
    change 선택 요소가 변경되어 입력 포커스가 사라짐
    focus 선택 요소에 현재 입력 포커스가 놓임

  • 이벤트 처리 속성

    이벤트핸들링속성 실행되는 상황
    onAbort 이미지를 로딩하는 작업이 사용자의 한 행동으로 인해 취소되었음
    onBlur 문서나 윈도우, 프레임세트, 폼 요소에서 현재 입력 포커스가 사라짐
    onChange 텍스트 필드나 텍스트 영역, 파일 업로드 필드, 선택 항목이 변경되어 현재 입력 포커스가 사라짐
    onClick 링크나 클라이언트측 이미지맵 영역, 폼 요소가 클릭됨
    onDbClick 링크나 클라이언트측 이미지맵 영역, 문서가 더블 클릭됨
    onDragDrop 드래그된 객체가 윈도우나 프레임에 드롭됨
    onError 이미지나 윈도우, 프레임을 로딩하는 동안 에러가 발생함
    onFocus 문서나 윈도우, 프레임 세트, 폼 요소에 입력 포커스 놓임
    onKeyDown 키를 누름
    onKeyPress 키를 눌렀다 놓음
    onKeyUp 키를 놓음
    onLoad 이미지나 문서, 프레임이 로드됨
    onMouseDown 마우스 버튼 누름
    onMouseMove 마우스를 이동함
    onMouseOut 링크나 클라이언트측 이미지맵에서 마우스를 옮김
    onMouseOver 마우스를 링크나 클라이언트측 이미지맵으로 옮김
    onMouseUp 마우스 버튼을 놓음
    onMove 사용자가 윈도우나 프레임을 이동함
    onReset 폼의 리셋 버튼을 클릭하여 폼을 리셋시킴
    onResize 사용자가 윈도우나 프레임의 크기를 조절
    onSelect 텍스트는 텍스트 필드나 영역에서 선택됨
    onSubmit 폼이 제출됨
    onUnload 사용자가 문서나 프레임 세트를 종료함


                                                       객체 정의하기

     

    • 객체 유형 정의
      • 프로퍼티 : 객체에 들어 있는 데이터 값에 액세스할 때 사용.
      • 메소드 : 객체에 어떤 작업을 할 때 사용하는 함수.
    • 객체 유형 만들기
      사용자가 직접 객체 유형을 정의하고 특정 객체 인스턴스를 만들 수 있 는데 이렇게 만들려면 객체 유형의 특정 인스턴스를 만들 때 사용되는 함수를 정의하기만 하면 된다. 본래 이러한
      생성자 함수는 다음과 같은 일을 한다.
      • 객체 유형의 프로퍼티에 값을 할당한다.
      • 객체 유형의 메소드로 사용할 수 있는 다른 함수를 지정한다.
    • 객체 사용 예
      1. table 객체의 정의 (table.js)
        function table_getValue(row,col){
          return this.data[row* this.columns+col ];
        }
        function table_setValue(row,col,value){
          this.data[row* this.columns+col ]=value;
        }
        function table_set(contents){
          var n=contents.length;
          for(var j=0;jthis.data[j]
        =contents[j];
        }
        function table_isHeader(row,col){
          return this.header[row* this.columns+col ];
        }
        function table_makeHeader(row,col){   this.header[row* this.columns+col ]=true;
        }
        function table_makeNormal(row,col){   this.header[row* this.columns+col ]=false;
        }
        function table_makeHeaderRow(row){   for(var j=0;j< this.columns+j)
            this.header[row* this.columns+col ]=true;
        }
        function table_makeHeaderColumn(col){   for(var i=0;i< this.rows;++i)
            this.header[i* this.columns+col ]=true;
        }
        function table_write(doc){
          doc.write("<TABLE BORDER="+ this.border+">");
          for(var i=0;i< this.rows;++i) {
            doc.write("<TR>");
            for(var j=0;j< this.columns;++j) {
              if( this.header[i* this.columns+j ]) {
                doc.write("<TH>");
                doc.write( this.data[i* this.columns+j ]);
                doc.write("</TH>");
              }
              else {
                doc.write("<TD>");
                doc.write( this.data[i* this.columns+j ]);
                doc.write("</TD>");
              }
            }
            doc.writeln("</TR>");
          }
          doc.writeln("</TABLE>");
        }
        funtion table(rows,columns) {
          this.rows=rows
          this.columns=columns
          this.border=0
          this.data=new Array(rows*columns)
          this.header=new Array(rows*columns)
          this.getValue=table_getValue
          this.setValue=table_setValue
          this.set=table_set
          this.isHeader=table_isHeader
          this.makeHeader=table_makeHeader
          this.makeNormal=table_makeNormal
          this.makeHeaderRow=table_makeHeaderRow
          this.makeHeaderColumn=table_makeHeaderColumn
          this.write=table_write
         
        }
      2. table 객체 사용하기
        <HTML>
        <HEAD>
        <TITLE>Defining Object Types</TITLE
        <SCRIPT LANGUAGE="JavaScript" SRC="table.js"><!-
        //-></SCRIPT>
        </HEAD>
        <BODY>
        <H1>Defining Object Types</H1>
        <SCRIPT LANGUAGE="JavaScript"><!-
        t=new table(3,4)
        contents=new
        Array("This","is","a","test","of","the","table","object.","Let's","see","it","work")
        t.set(contents)
        t.border=4
        t.makeHeaderColumn(0)
        t.write(document)
        //-></SCRIPT>
        </BODY>
        </HTML>
      3. 객체 유형에 프로퍼티와 메소드 추가
        : prototype 프로퍼티를 통해서 인스턴스화할 수 있는 미리 정의된 객체 유형에 프로퍼티와 메소드 추가
        사용 예
        <HTML>
        <HEAD>
        <TITLE>Updating Object Types </TITLE>
        <SCRIPT LANGUAGE="JavaScript" SRC="table.js"><!-
        //-></SCRIPT>
        </HEAD>
        <BODY>
        <H1>Updating Object Types</H1>
        <SCRIPT LANGUAGE="JavaScript"><!-
        function table_colorWrite(doc){
          ........
          함수 정의
          ........
          ........
        }
        t=new table(3,4)
        table.prototype.bgColor="Cyan"
        table.prototype.colorWrite=table_colorWrite
        .............
        .............
        t.colorWrite(document)
        //-></SCRIPT>
        </BODY>
        </HTML>
      4. 프로퍼티와 메소드 삭제
        delete objectName.propertyName
        delete objectName.methodName

                                                            브라우저 객체

     

    객 체 용 도
    window 객체 브라우저 윈도우나 윈도우 안에 있는 프레임에 액세스할 때 사용한다. 프로퍼티와 메소드를 참조할 때, window 객체가 존재하는 경우에는 "window."접두사를 붙일 필요가 없다
    document 객체 현재 윈도우에 로드되어 있는 문서에 액세스할 때 사용한다. document 객체는 컨텐트를 제공하는 HTML 문서, 즉 HEAD와 BODY 태그가 있는 문서를 의미한다.
    location 객체 URL을 나타낼 때 사용한다. 이 객체는 URL객체를 만들거나 URL의 일부분에 액세스하거나 기존의 URL을 수정할 때 사용할 수 있다.
    history 객체 한 윈도우 안에서 액세스된 URL의 히스토리를 유지할 때 사용
    frame 객체, frames 배열 HTML 프레임에 액세스할 때 사용
    frames 배열은 윈도우안에 있는 모든 프레임에 액세스할 때 사용
    link 객체, links 배열 하이퍼텍스트 링크의 텍스트 기반이나 이미지 기반 소스 앵커(anchor)에 액세스할 때 사용
    links배열은 문서 안에 있는 모든 link 객체에 액세스할 때 사용한다. I.E.는 link 객체의 anchor객체를 결합한다.
    anchor 객체, anchors 배열 하이퍼텍스트 링크의 타켓에 액세스할 때 사용
    anchors 배열은 문서 안에 있는 모든 anchor 객체에 액세스할 때 사용
    image객체, images 배열 HTML 문서에 삽입되어 있는 이미지에 액세스할 때 사용
    images 배열은 문서 안에 있는 모든 image 객체에 액세스할 때 사용
    area 객체 클라이언트측 이미지맵 안에 있는 영역에 액세스할 때 사용
    applet 객체, applets 배열 Java 애플릿에 액세스할 때 사용
    애플릿 배열은 문서 안에 있는 모든 애플릿에 액세스할 때 사용
    event 객체, Event 객체 이벤트 발생에 대한 정보에 액세스할 때 사용
    event 객체는 특정 이벤트에 대한 정보 제공
    Event 객체는 이벤트를 식별하는 데 사용하는 상수 제공
    form 객체, forms 배열 HTML 폼에 액세스시 사용
    forms 배열은 문서 안에 있는 모든 폼에 액세스시 사용
    element 객체 폼 안에 들어있는 모든 폼 요소에 액세스시 사용
    text 객체 폼의 텍스트 필드에 액세스시 사용
    textarea 객체 폼의 텍스트 영역 필드에 액세스시 사용
    radio 객체 폼의 라디오 버튼 세트에 액세스하거나 세트 안에 있는 각각의 버튼에 액세스할 때 사용
    checkbox 객체 폼의 체크 박스에 액세스할 때 사용
    button 객체 Submit나 Reset 버튼이 아닌 폼 버튼에 액세스시 사용
    reset 객체 폼의 Reset 버튼에 액세스시 사용
    selet 객체 폼의 선택 리스트에 액세스시 사용
    option 객체 option 객체는 선택 리스트의 요소에 액세스시 사용
    password 객체 폼의 패스워드 필드에 액세스시 사용
    hidden 객체 폼의 숨겨진 필드에 액세스시 사용
    FileUpload 객체 폼의 파일 업로드 요소에 액세스시 사용
    navigator 객체 스크립트를 실행하고 있는 브라우저에 대한 정보에 액세스시 사용
    screen 객체 사용자의 화면의 색상 깊이와 크기에 대한 정보에 액세스시 사용
    embed 객체, embeds 배열 삽입된 객체에 액세스시 사용
    embeds 배열은 문서 안에 삽입된 모든 객체에 대한 액세스 제공
    mimeType 객체, mimeTypes 배열 브라우저가 제공하는 특징 MIME 유형에 대한 정보에 액세스시 사용
    mimeTypes 배열은 제공하는 모든 mimeType 객체의 배열
    I.E.는 빈 배열을 리턴하면서 mimeTypes에 대해서 임시적으로 지원
    plugin 객체, plugins 배열 특정 브라우저 플러그인에 대한 정보에 액세스시 사용
    plugins 배열은 브라우저가 지원하는 모든 플러그인의 배열
    I.E.는 빈 배열을 리턴하면서 plugins에 대해서 임시적으로 지원

                                                                    

                                                               window 객체

    • 모든 브라우저 스크립트의 기본적인 것으로, 브라우저가 자동으로 정의하는 최상위 레벨의 객체이다. 현재 열려 있는 각 윈도우에 대해 별도의 window 객체가 정의된다.

    window 객체의 프로퍼티

     

    프로퍼티 설 명
    closed 윈도우가 닫혀 있는지 식별
    defaultStatus 브라우저 윈도우의 하단의 상태바에 나타나는 디폴트 상대 메시지를 지정
    document 윈도우에 표시되어 있는 현재 문서를 지정하는 객체
    frames 윈도우 객체에 들어 있는 모든 프레임 객체로 구성된 배열
    history 마지막으로 윈도우로 로드된 URL의 리스트를 포함하는 윈도우의 히스토리 객체
    length window에 들어 있는 프레임의 수 식별
    location window 객체와 관련된 URL을 지정하는 객체
    name 윈도우의 이름 지정
    offscreenBuffering 윈도우 정보의 오프스크린 버퍼링이 사용될 것인지를 지정하는 부울값
    오프스크린 버퍼링은 윈도우를 나타내기 전에 윈도우의 모든 요소를 로드할 때 사용
    opener 윈도우를 만들거나 열 수 있도록 해주는 window 객체 지정
    parent 특정 윈도우를 포함하는 윈도우를 지정하는 시너님
    self 참조될 현재 윈도우를 지정하는 시너님
    status 브라우저 윈도의 하단의 상태 표시줄에 나타날 임시 메시지를 지정
    top 중첩된 일련의 윈도우에서 맨 위에 있는 브라우저 윈도우를 의미하는 시너님
    window 참조될 현재 윈도우를 식별하는 시너님

    window 객체의 메소드
    메 소 드 설 명
    alert(text) 경고 다이얼로그 박스를 표시
    blur() 포커스를 윈도우에서 옮긴다
    setInterval(expression,milliseconds) 지정된 타임아웃 인터벌이 지난 이후에 표현식을 반복해서 평가하거나 함수를 불러온다.
    clearInterval(interval) 이전에 설정된 인터벌 타이머클리어
    setTimeout(expression,milliseconds) 타임아웃 기간이 지난 이후에 표현식을 평가하거나 함수를 호출한다.
    clearTimeout(timer) 이전에 설정된 타임아웃을 클리어
    close() 지정된 윈도우를 닫는다.
    confirm(text) 확인 다이얼로그 박스를 나타낸다.
    focus() 윈도우로 포커스를 가져간다.
    open(url,name,[options]) 새로운 윈도우를 열고 새로운 window 객체를 만듬
    prompt(text,defaultInput) 프롬프트 다이얼로그 박스를 나타낸다.
    scroll(x,y) 윈도우를 특정 위치까지 스크롤한다.

    open() 메소드의 옵션
    옵 션 설 명
    toolbar yes no 윈도우에 툴바 제공
    location yes no 윈도우에 위치 필드 제공
    directories yes no 디렉토리 버튼 제공
    status yes no 상태 표시줄 제공
    menubar yes no 메뉴바 제공
    scrollbars yes no 스크롤 바 제공
    resizable yes no 윈도우 크기 조절 가능
    width 정수 윈도우의 폭(픽셀)
    height 정수 윈도우의 높이(픽셀)

                                                               frame 객체

    • 프레임은 윈도우를 독립된 표시 영역들로 분할한 후, 이 영역들에 표시되는 정보들을 강력하게 컨트롤 할 수 있게 해준다.
    • 프레임 객체의 프로퍼티와 메소드는 window 객체와 같지만, close() 메소드는 지원하지 않는다.

    document 객체

    • JavaScript 에서 아주 중요한 객체로, 이 객체를 사용하면 로드될 문서를 업데이트하고 로드된 문서 안에 있는 HTML 요소에 액세스할 수 있다.

    프로퍼티 설 명
    alinkColor <BODY> 태그의 alink 속성의 값 지정
    anchor 문서에 들어 있는 배열을 참조하는 객체
    anchors 문서에 들어 있는 모든 앵커의 배열
    applet 문서에 들어 있는 애플릿을 참조하는 객체
    applets 문서에 들어 있는 모든 애플릿의 배열
    area 문서 안의 이미지맵 영역을 참조하는 객체
    bgColor <BODY> 태그의 bgColor 속성의 값 식별
    cookie 쿠키의 값 식별
    domain 문서가 로드되는 서버의 도메인 이름 식별
    embeds 문서안의 모든 플러그인의 배열
    fgColor <BODY> 태그의 text 속성값 지정
    form 문서 안의 폼을 참조하는 객체
    Forms[] 문서 안의 모든 폼의 배열
    image 문서 안의 이미지를 참조하는 객체
    Images[] 문서 안의 모든 이미지의 배열
    lastModified 문서가 마지막으로 수정된 날짜
    link 문서 안의 링크를 참조하는 객체
    links 문서 안의 모든 링크의 배열
    linkColor <BODY> 태그의 link 속성의 값 식별
    plugin 문서 안의 플러그인을 참조하는 객체
    plugins[] 브라우저가 지원하는 플러그인을 나타내는 객체의 배열
    referrer 문서에 대한 링크를 제공하는 문서의 URL
    title 문서의 타이틀
    URL 문서의 URL
    vlinkColor <BODY> 태그의 vlink 속성의 값 식별

    메 소 드 설 명
    close() 문서의 객체를 만드는 데 사용된 스트림
    open([mimeType][,"replace"]) 선택적인 MIME 유형으로 문서 객체를 만들 때 사용되는 흐름을 개시한다. "replace" 파라미터는 text/html MIME 유형과 함께 사용되어 히스토리 리스트에 있는 현재 문서를 대체
    write(expr1[,expr2...,exprN]) 문서에 표현식의 값을 기록
    write(expr1[,expr2...,exprN]) 개행 문자가 다음에 따라오는 문서에 표현식의 값 기록

    navigator 객체

    • navigator 객체는 window 객체와 마찬가지로 브라우저 객체 모델에서 최상위 레벨의 객체이며, 스크립트를 실행할 때 사용되는 브라우저의 종류와 버전에 대한 정보 제공한다.

    프로퍼티 브라우저 지원 설 명
    appCodeName N2, I.E3 브라우저 색상 이름
    AppMinorVersion I.E4 브라우저 버전 번호
    appName N2, I.E3 브라우저 이름
    appVersion N2, I.E3 브라우저의 버전
    browserLanguage I.E4 브라우저에 설정되어 있는 언어
    connectionSpeed I.E4 브라우저가 네트워크에 연결되는 속도
    cookieEnabled I.E4 브라우저가 쿠키를 허용하도록 설정되어 있는지의 여부
    cpuClass I.E4 브라우저 실행시 사용되는 마이크로프로세서의 유형
    onLine I.E4 브라우저가 현재 온라인 연결을 가지고 있는지 여부
    Language N4, I.E4 브라우저에 설정되어 있는 언어
    mimeTypes N3, I.E4 현재 브라우저가 지원하는 모든 MIME 유형의 배열
    platform N4, I.E4 브라우저가 실행되는 운영체제 플랫폼
    plugins N3, I.E4 현재 브라우저에 설치된 모든 플러그인의 배열
    systemLanguage I.E4 운영체제의 디폴트 언어
    userAgent N2, I.E3 브라우저에서 서버로 전송된 HTTP 프로토콜의 사용자 에이전트 헤더
    userLanguage I.E4 사용자가 사용하는 언어
    userProfile I.E4 사용자 프로파일 정보에 대한 액세스를 제공하는 객체

    navigator 객체의 메소드
    메 소 드 설 명
    javaEnabled() 사용자가 브라우저의 Java 기능을 켜두었는지의 여부를 나타내는 부울값 리턴
    taintEnabled() 사용자가 data tainting(보안 메커니즘)을 활성화했는지 여부를 나타내는 부울값 리턴
    preference 서명이 되지 않은 스크립트가 보안 관련 프로퍼티를 얻고 설정할 때 사용

    event 객체

    event 객체의 프로퍼티
    프로퍼티 브라우저 설 명
    data N DragDrop 이벤트로 인해 드롭된 객체의 URL이 들어있는 스트링 배열
    height, width N 윈도우나 프레인의 길이와 너비(픽셀표시)
    pageX, pageY N 픽셀로 나타낸 커서의 수평/수직 위치(페이지에서의 상대적위치)
    screenX, screenY N, I.E 픽셀로 나타낸 커서의 수평/수직 위치(화면에서의 상대적 위치)
    layerX, layerY N 픽셀로 나타낸 커서의 수평/수직 위치, 이벤트가 발생한 레이어에 대한 상대적 위치. Resize 이벤트와 함께 사용하면 layerX와 layerY가 이벤트가 타겟으로 하는 객체의 길이와 너비 지정
    clientX와 clientY I.E 픽셀로 나타낸 커서의 수평/수직 위치, 이벤트가 발생한 웹페이지에서의 상대적 위치
    offsetX, offsetY I.E 픽셀로 나타낸 커서의 수평/수직 위치, 이벤트가 발생한 컨테이너에 대한 상대적 위치
    X, Y I.E 픽셀로 나타낸 커서의 수평/수직 위치, 이벤트가 발생한 문서에 대한 상대적 위치
    target N 이벤트가 전송된 원래 객체
    srcElement I.E 이벤트가 전송된 원래 객체
    type N, I.E 발생한 이벤트 유형
    which N 눌려진 마우스 버튼(왼:1, 가:2, 오:3)이나 눌려진 키의 ASCII값
    keyCode I.E 키 누름과 연관된 Unicode 키 코드를 식별
    button I.E 이벤트가 발생했을 때 눌려진 마우스 버튼 식별(0:눌려진버튼없음, 1:왼, 2:오, 4:가)
    modifiers N 마우스나 키 이벤트와 연관된 수정자 키(ALT_MASK,CONTROL_MASK,SHIFT_MASK,META_MASK)를 식별
    altkey,ctrlkey,shiftkey I.E true나 false로 설정하여 이벤트가 발생했을 때 Alt키와 Control키, Shift 키 중에 어떤 것이 눌려졌는지 알려준다.
    cancelBubble I.E true나 false로 설정하여 이벤트 버블링을 취소하거나 활성화한다.
    fromElement, toElement I.E 이동 중인 HTML 요소 지정
    reason I.E 데이터 소스 객체에 대한 데이터 전송 상태를 나타내는데 사용
    returnValue I.E true나 false로 설정하여 이벤트 핸들러의 리턴값을 나타낸다. 이벤트 핸들러에서 true나 false를 리턴하는 것과 같다.
    srcFilter I.E onfilterchange 이벤트를 시작하는 filter객체 지정

     

    screen 객체

  • screen 객체의 프로퍼티
    • height : 사용자의 화면의 현재 높이(픽셀)
    • width : 사용자의 화면의 현재 너비(픽셀)
    • colorDepth : 사용자의 화면/비디오 카드에서 현재 지원하는 색상당 바이트

    form 객체

    • document 객체의 프로퍼티로 액세스되고, form 객체는 문서 안의 폼에 액세스할 수 있도록 해주고, 폼 관련 이벤트에 응답을 할 수 있도록 해주기 때문에 중요하다.

    form 객체의 프로퍼티
    프로퍼티 설 명
    action <FORM> 태그의 HTML action 속성에 대한 액세스 제공
    button GUI 컨트롤 버튼을 나타내는 객체
    checkbox 체크 박스 필드를 나타내는 객체
    elements 폼 안에 포함되어 있는 모든 필드와 GUI 컨트롤을 포함하는 배열
    encoding <FORM> 태그의 HTML enctype 속성에 대한 액세스 제공
    FileUpload 파일 업로드 폼 필드를 나타내는 객체
    hidden 숨겨진 폼 필드를 나타내는 객체
    length elements 배열의 길이에 대한 액세스 제공
    method <FORM> 태그의 HTML method 속성에 대한 액세스 제공
    name 폼의 이름 식별
    password 패스워드 필드를 나타내는 객체
    radio 라디오 버튼 필드를 나타내는 객체
    reset reset 버튼을 나타내는 객체
    select 선택 항목 리스트를 나타내는 객체
    submit submit 버튼을 나타내는 객체
    target <FORM> 태그의 HTML target 속성에 대한 액세스 제공
    text 텍스트 필드를 나타내는 객체
    textarea 텍스트 영역 필드를 나타내는 객체

    form 객체의 메소드
    메 소 드 설 명
    handleEvent() 지정된 이벤트에 대한 폼의 이벤트 핸들러를 호출할 때 사용
    submit() 폼을 제출시 사용
    reset 폼의 엔트리를 디폴트 값으로 재설정시 사용

    form 요소 객체의 프로퍼티
    객 체 프로퍼티 설 명
    button name 버튼의 name 속성에 대한 액세스 제공
    type 객체의 유형 지정
    value 객체의 값 지정
    checkbox checked 체크박스가 현재 체크되어 있는지를 식별
    defaultChecked 체크박스가 디폴트로 체크되어 있는지 식별
    name 체크박스의 HTML name 속성에 대한 액세스 제공
    type 객체의 유형 식별
    value 객체의 값 식별
    FileUpload name 객체의 name 속성에 대한 액세스 제공
    type 객체의 type 속성에 대한 액세스 제공
    value 객체의 값 식별
    hidden name 객체의 name 속성에 대한 액세스 제공
    type 객체의 유형 식별
    value 객체의 값 식별
    password defaultChecked 객체의 디폴트 값 식별
    name 객체의 name 속성에 대한 액세스 제공
    type 객체의 유형 식별
    value 객체의 값 식별
    radio checked 라디오 버튼이 체크되어 있는지 식별
    defaultChecked 라디오 버튼이 디폴트로 체크되어 있는지 식별
    name 객체의 name 속성에 대한 액세스 제공
    type 객체의 유형 식별
    value 객체의 값 식별
    reset name 객체의 name 속성에 대한 액세스 제공
    type 객체의 유형 식별
    value 객체의 값 식별
    select length 선택 리스트의 길이 식별
    name 객체의 name 속성에 대한 액세스 제공
    option 선택 리스트가 제공하는 옵션 식별하는 배열
    selectedIndex 선택 리스트 안에서 처음 선택된 옵션 식별
    type 객체의 유형 식별
    submit name 객체의 name 속서에 대한 액세스 제공
    type 객체의 유형 식별
    value 객체의 값 식별
    text defaultValue 텍스트 필드에 나타나는 디폴트 텍스트를 식별
    name 객체의 name 속성에 대한 액세스 제공
    type 객체의 유형 식별
    value 객체의 값 식별
    textarea defaultValue 텍스트 영역 필드에 나타나게 되는 디폴트 텍스트 식별
    name 객체의 name 속성에 대한 액세스 제공
    type 객체의 유형 식별
    value 객체의 값 식별

    form 요소 객체의 메소드
    객 체 메 소 드 설 명
    button Click() 클릭된 버튼 시뮬레이트
    blur() 포커스 잃음
    focus() 포커스 맞춤
    checkbox Click() 클릭된 체크 박스 시뮬레이트
    blur() 포커스 잃음
    focus() 포커스 맞춤
    FileUpload blur() 포커스 잃음
    focus() 포커스 맞춤
    select() 입력 영역을 선택
    hidden 없음
    password blur() 포커스 잃음
    focus() 포커스 맞춤
    select() 패스워드 필드에 나타나는 텍스트를 하이라이트
    radio Click() 라디오 버튼 클릭 시뮬레이트
    blur() 포커스 잃음
    focus() 포커스 맞춤
    reset Click() 리셋 버튼 클릭 시뮬레이트
    blur() 포커스 잃음
    focus() 포커스 맞춤
    select blur() 포커스 잃음
    focus() 포커스 맞춤
    submit Click() 제출 버튼 클릭 시뮬레이트
    blur() 포커스 잃음
    focus() 포커스 맞춤
    text blur() 포커스 잃음
    focus() 포커스 맞춤
    select() 텍스트 필드에 있는 텍스트 하이라이트
    textarea blur() 포커스 잃음
    focus() 포커스 맞춤
    select() 텍스트 영역에 있는 텍스트 하이라이트

    location 객체

    • 윈도우에 로드되어 있는 현재 문서의 URL에 액세스하거나 새로운 문서를 로드할 때 사용


    location 객체의 프로퍼티
    프로퍼티 설 명
    hash URL의 앵커 부분(존재하는 경우)
    host URL의 hostname:port 부분
    hostname URL의 host부분
    href 전체 URL
    pathname URL의 경로명 부분
    port URL의 포트 부분
    protocol URL의 프로토콜 부분
    search URL의 쿼리 스트링 부분

     

    location 객체의 메소드
    • reload() : 윈도우의 현재 문서를 브라우저의 Reload 버튼에서 사용하는 정책에 따라 다시 로드
      • Every time : 문서는 매번 서버에서 다시 로드
      • Once per session : 서버의 문서의 날짜가 캐시에 저장되어 있는 문서보다 더 최신 날짜라는 것을 나타내면 문서는 세션당 한 번씩 서버에서 다시 로드된다. 문서가 캐시에 없는 경우에는 서버에서 로드
      • Never : 문서는 가능하면 캐시에서 다시 로드, 그렇지 않으면 서버에서 로드
    • replace() : URL을 파라미터로 취하여, 현재 문서 히스토리 목록에 있는 현재 문서위로 그 URL의 문서를 로드, 그러면 브라우저의 Back버튼을 클릭하여 이전 문서로 돌아갈 수 없음

    link 객체

    • link 객체는 document 객체의 프로퍼티로, 문서에 들어있는 텍스트나 이미지 링크를 캡슐화
    • links 배열은 문서에 들어있는 모든 링크의 배열
    • link 객체의 메소드
      handleEvent() : event 객체를 인자로 취하며 그 이벤트에 대해 적당한 이벤트 핸들러 호출

    link 객체의 프로퍼티
    프로퍼티 설 명
    hash URL의 앵커 부분(존재하는 경우)
    host URL의 hostname:port 부분
    hostname URL의 host부분
    href 전체 URL
    pathname URL의 경로명 부분
    port URL의 포트 부분
    protocol URL의 프로토콜 부분
    search URL의 쿼리 스트링 부분
    target 링크의 HTML, target 속성

     

    anchor 객체

    • HTML 문서 안에서 이름이 지정된 오프셋으로 사용되는 앵커 의미
    • anchors 배열에는 문서의 모든 앵커가 들어있음
    • 프로퍼티나 메소드 또는 이벤트를 전혀 가지고 있지 않음
    • HTML 문서와 관련하여 정의된 이름이 지정된 오프셋을 추적할 때 사용
    • anchor 객체는 HREF 속성을 포함하는 경우에 link 객체가 된다.

    history 객체

    • history 객체의 프로퍼티
      • current : 윈도우에 나타나는 현재 문서의 URL
      • length : History 리스트의 길이
      • next : History 리스트에서의 다음 URL
      • previous : History 리스트에서의 이전 URL
    • history 객체의 메소드
      • back() : History 리스트에 이전 문서를 로드. 브라우저의 Back 버튼을 클릭하는 것과 같은 효과
      • forward() : History 리스트에 다음 문서를 로드. 브라우저의 Forward 버튼을 클릭하는 것과 같은 효과
      • go() : History 리스트에 있는 특정 문서로 감
        • go(n) : n>0인 경우, 이 메소드는 History 리스트에서 n개의 엔트리가 앞에 있는 문서를 로드, n=0인 경우에는 현재 문서가 다시 로드되고, n<0인 경우엔 History 리스트에서 n개의 엔트리 뒤에 있는 문서를 로드
        • go(string) : go()는 이 스트링을 서브스트링으로 갖고 있는 URL의 History 리스트에서 가장 가까운 문서를 로드

    image 객체

    • document 객체의 프로퍼티
    • 문서와 함께 로드된 이미지에 대한 액세스 제공
    • images 배열은 문서 안에 지정되어 있는 각각의 <IMG>태그에 대한 엔트리가 들어있음
    • image 객체 유형을 사용하면 키워드와 생성자로 새로운 image 객체를 명시적으로 만들 수 있다. Image() 생성자는 웹페이지의 일부로서 처음에 나타나지 않는 이미지를 만들고 미리 로드할 때 사용한다. 이러한 image 객체는 브라우저의 캐시에 저장되면 이미 나타난 이미지를 대체할 때 사용
      * Image() 생성자를 사용하여 캐시된 이미지 만드는 예 cachedImage=new Image()
      cachedImage.src="myImage.gif"
      = > 첫번째 문장은 새로운 image 객체를 만들고 그것을 cachedImage 변수에 대입하고, 두번째 문장은 image 객체의 src프로퍼티를 myImage.gif 이미지 파일로 설정한다. 이 경우 myImage.gif는 브라우저 캐시로 로드된다. 그러면 로드된 이미지는 cachedImage 변수를 사용하여 참조 가능하다.

      image 객체의 프로퍼티
      프로퍼티 설 명
      border <:IMG> 태그의 BORDER 속성의 값
      complete 이미지가 완전히 로드되었는지 식별
      height <:IMG> 태그의 HEIGHT 속성의 값
      hspace <IMG> 태그의 HSPACE 속성의 값
      lowsrc <IMG> 태그의 LOWSRC 속성의 값
      name <IMG> 태그의 NAME 속성의 값
      prototype image 객체에 사용자 지정 프로퍼티를 추가할 때 사용
      src <IMG> 태그의 SRC 속성의 값
      vspace <IMG> 태그의 VSPACE 속성의 값
      width <IMG> 태그의 WIDTH 속성의 값

    area 객체

    • 이미지맵은 여러 가지 다른 영역으로 나누어져 있는 이미지로서 각각의 영역은 자체 URL과 관련되어 있다. 그리고 이러한 영역과 관련된 사용자 처리 방식으로 area 객체를 제공

    area 객체의 프로퍼티
    프로퍼티 설 명
    hash area 객체의 HREF 속성의 파일 오프셋 부분
    host area 객체의 HREF 속성의 호스트 이름 부분
    hostname area 객체의 HREF 속성의 host:port 부분
    href area 객체의 완전한 HREF 속성
    pathname area 객체의 HREF 속성의 경로명 부분
    port area 객체의 HREF 속성의 포트 부분
    protocol area 객체의 HREF 속성의 프로토콜 부분
    search area 객체의 HREF 속성의 쿼리 스트링 부분
    target area 객체의 TARGET 속성

     

    Array 객체

    • Array 객체를 사용하면 배열을 객체처럼 액세스 가능
    • Array 객체의 프로퍼티
      • length : 배열의 길이 식별
      • prototype : 모든 객체 유형이 지원하는 프로퍼티로 객체 유형에 대해 추가적인 프로퍼티 및 메소드 정의 가능
    • Array 객체의 메소드
      • toString() : 배열의 스트링 버전 리턴, 배열 요소는 컴마로 구분
      • join(separator) : 배열의 스트링 버전 리턴, 배열 요소는 seperator 스트링으로 구분, 분리자가 없으면 컴마로 구분
      • reverse() : 배열의 요소를 역순으로 바꿈
      • sort(comparisionFunction) : 비교 연산에 따라 배열의 요소 정렬. 비교 함수가 지정되면, 배열 요소는 사전순서로 정렬. 비교 연산이 지정되면 두개의 파라미터 p1,p2를 취하고, p1이 p2보다 작은 경우에는 음의 정수를 리턴하고, 같으면 0을 리턴하고, p1이 p2보다 크면 양의 정수 리턴

    Boolean 객체

    • Boolean 객체를 사용하면 부울값은 객체로서 액세스 가능
    • Boolean 객체는 생성자에 대한 인자로서 값을 식별하여 만들어짐 myBoolean=new Boolean(false)
      yourBoolean=new Boolean(true)
    • Boolean 객체의 프로퍼티
      • prototype : 모든 객체 유형이 지원하는 프로퍼티로 객체 유형에 대해 추가적인 프로퍼티 및 메소드 정의 가능
    • Boolean 객체의 메소드
      • toString() : 부울값에 해당하는 스트링 리턴
      • valueOf() : 객체의 값에 따라 true나 false로 리턴

    Date 객체의 메소드
    메 소 드 설 명
    getDate()
    getUTCDate()
    setDate()
    setUTCDate()
    Date 객체의 날짜를 설정하거나 리턴
    getDay()
    getUTCDay()
    Date 객체의 한 주의 날짜를 설정하거나 리턴
    getHours()
    getUTCHours()
    setHours()
    setUTCHours()
    Date 객체의 시간를 설정하거나 리턴
    getMilliseconds()
    getUTCMilliseconds()
    setMilliseconds()
    setUTCMilliseconds()
    Date 객체의 밀리초 값을 설정하거나 리턴
    getMinutes()
    getUTCMinutes()
    setMinutes()
    setUTCMinutes()
    Date 객체의 분을 설정하거나 리턴
    getMonth()
    getUTCMonth()
    setMonth()
    setUTCMonth()
    Date 객체의 달을 설정하거나 리턴
    getSeconds()
    getUTCSeconds()
    setSeconds()
    setUTCSeconds()
    Date 객체의 초를 설정하거나 리턴
    getTime()
    getUTCTime()
    Date 객체의 시간을 설정하거나 리턴
    getTimeZoneOffset() Date 객체의 시간대 오프셋(분)을 리턴
    getYear()
    getFullYear()
    getUTCFullYear()
    setYear()
    setFullYear()
    setUTCFullYear()
    Date 객체의 연도를 리턴하거나 설정한다. 완전한 연도를 나타내는 방법으로 4자리 연도 값을 사용한다.
    toGMTString() 날짜를 Internet GMT(Greenwich Mean Time) 포맷의 스트링으로 변환
    toLocaleString() 날짜를 로케일(locale)포맷의 스트링으로 변환. 로케일 포맷이란 사용자가 위치해 있는 지형적 위치에서 일반적으로 사용하는 포맷 의미
    toString() Date 객체의 스트링 값을 리턴
    valueOf() 1970년 1월 1일 자정 이후의 밀리초 값 리턴
    toUTCString() UTC에서 시간을 나타내는 스트링 값을 리턴

    Date 생성자
    생 성 자 설 명
    Date() 현재 날짜와 시간으로 Date 인스턴스 만듬
    Date(dateString) dateString 파라미터에 지정되어 있는 날짜로, Date 인스턴스를 만든다. dateString의 포맷은 "월,일,연도,시:분:초"
    Date(milliseconds) 1970년 1월 1일 자정 이후 지정된 밀리초 값으로 Date 인스턴스를 만든다.
    Date(year,month,
    day,hours,minutes,
    seconds,milliseconds)
    년,월,일,시,분,초,밀리초 정수에 따라 지정된 날짜로 Date 인스턴스를 만든다. 연도와 월 파라미터는 제공되어야 하고 다른 나머지 파라미터가 포함되면 앞에 오는 모든 파라미터가 제공되어야

    Function 객체

    • 함수를 객체처럼 액세스 가능하고, 이 객체는 스크립트를 실행하는 동안에 함수를 동적으로 만들고 호출할 때 사용
    • Function 객체는 함수의 파라미터와 본문을 Function() 생성자에 제공하면 된다.
      variable=new Function("p1","p2", ... ,"pn","body")
    • Function 객체 프로퍼티
      • length : 함수에 대해 정의된 파라미터의 숫자 식별
      • prototype : 모든 객체 유형이 지원하는 프로퍼티로 객체 유형에 대해 추가적인 프로퍼티 및 메소드 정의 가능
      • arguments : 호출시 함수에 전달되는 인자를 가리키는 배열
      • caller : 특정 함수를 호출한 함수를 가리킴
    • Function 객체의 메소드
      • toString() : 함수의 스트링 형태 리턴
      • valueOf() : 함수 자체 리턴

    Global 객체

    • new Global() 을 통해서 명시적으로 만들거나, 참조할 수 없다. 대신 해당 프로퍼티와 메소드가 전역 변수와 함수로 직접 참조됨
    • Global 객체의 프로퍼티
      • Nan : 숫자가 아니라는 의미
      • Infinity : 양수 무한대 값 의미
    • Global 객체의 메소드
      • escape(string) : string을 새로운 스트링으로 변환
      • eval(x) : 표현식 x의 값을 계산하고 리턴
      • inFinite(number) : number가 유한하면 true를 리턴하고, 무한하면 false를 리턴
      • inNaN(number) : number가 숫자가 아니면 true를 리턴하고, 숫자이면 false를 리턴
      • parseFloat(string) : string을 부동 소수 값으로 파싱
      • parseInt(string,radix) : string을 밑이 radix인 정수로 파싱
      • unescape(string) : escape()에 들어 있는 스트링을 원래의 값으로 되돌린다.

    Math 객체

    • 수학적 상수와 함수의 표준 라이브러리 제공
    • Math의 특수 인스턴스는 Math가 내장 객체이고 객체 유형이 아니기 때문에 만들어지지 않는다.


    Math 프로퍼티
    프로퍼티 설 명
    E Euler의 상수. 이것은 계산을 하는 어디에서나 발견할 수 있으며 자연대수의 기초
    LN2 2의 자연대수. 이것은 자연대수와 밑이 2인 대수 사이의 전환에 사용되는 간단한 상수
    LN10 10의 자연대수. LN2와 마찬가지로 대수 변환에 사용
    LOG2E 밑이 2인 E의 대수. 이것은 밑이 10인 대수를 밑이 E인 대수로 변환시 사용
    PI 원의 원주 대 지름의 비율
    SQRT1_2 1/2의 제곱근은 많은 삼각법 계산에서 사용
    SQRT2 2의 제곱근은 대수식에서 흔히 사용

    Math 메소드
    메 소 드 설 명
    abs(x) x의 절대값 리턴
    acos(x) x의 아크 코사인값 라디안으로 리턴
    asin(x) x의 아크 사인값 라디안으로 리턴
    atan(x) x의 아크 탄젠트 값을 라디안으로 리턴
    atan2(x,y) (x,y)에 해당하는 극좌표의 각도를 리턴
    ceil(x) x보다 크거나 작은 최소 정수값 리턴
    cos(x) x의 코사인 값 리턴
    exp(x) eX를 리턴
    floor(x) x보다 작거나 같은 최대 정수값 리턴
    log(x) x의 자연대수 리턴
    max(x,y) x, y 중 큰 값 리턴
    min(x,y) x, y 중 작은 값 리턴
    pow(x,y) xy를 리턴
    random() 0과 1사이의 임의의 숫자 리턴
    round(x) x의 가장 가까운 정수로 반올림되는 값 리턴
    sin(x) x의 사인값 리턴
    sqrt(x) x의 제곱근 리턴
    tan(x) x의 탄젠트 값 리턴

    Number 객체

    • Number 객체 유형을 사용하면 숫자를 객체로 다룰 수 있다.
    • Number 객체의 프로퍼티
      • MAX_VALUE : 숫자는 가능한 최대 수치값
      • MIN_VALUE : 숫자는 가능한 최소 수치값
      • NaN : 숫자가 아니다
      • NEGATIVE_INFINITY : 숫자가 음수 무한대 값
      • POSITIVE_INFINITY : 숫자가 양수 무한대 값
      • prototype : 모든 객체 유형이 지원
    • Number 객체의 메소드
      • toString(radix) : 밑이 radix인 숫자를 나타내는 스트링 리턴
      • valueOf() : Number 객체의 수치값 리턴

    Object 객체

    • Object 객체는 다른 모든 객체들이 파생되어 나가는 기반 객체로 이것의 프로퍼티와 메소드는 다른 객체 유형들에서 사용 가능
    • Object 객체의 프로퍼티
      • prototype : 모든 객체 유형이 지원
      • constructor : 객체 생성자의 이름 식별
    • Object 객체의 메소드
      • toString() : 객체를 스트링 표현으로 바꾸는 역할
      • valueOf() : 객체와 관련된 경우의 원시값(숫자,스트링,부울값)을 리턴하고, 그렇지 않은 경우에는 객체 자체를 리턴

    String 객체

    • 스트링을 객체로 액세스 가능
    • String 객체의 프로퍼티
      • length : 문자에서 스트링의 길이 알아내는 역할
      • prototype : 모든 객체 유형이 지원

    String 메소드
    메 소 드 설 명
    charAt(index) 메소드가 적용되는 스트링의 지정된 인덱스에 있는 문자로 구성된 스트링을 리턴
    charCodeAt(index) 지정된 인덱스의 문자의 Unicode 인코딩 리턴
    fromCharCode(codes) 문자 코드의 컴마로 구분된 시퀀스에서 스트링 만듬
    indexOf(pattern) 스트링안에 들어있는 pattern 파라미터가 지정한 첫 번째 스트링의 인덱스 리턴, 패턴이 스트링 안에 들어있지 않으면 -1 리턴
    indexOf(pattern,startIndex) startIndex가 지정한 위치에서 검색을 시작하는 것을 제외하면 indexOf(pattern) 메소드와 같다.
    lastIndexOf(pattern) 스트링에 들어 있는 pattern 파라미터가 지정한 마지막 스트링의 인덱스 리턴, 패턴이 스트링 안에 들어있지 않으면 -1 리턴
    lastIndexOf(pattern,startIndex) startIndex가 지정한 위치에서 검색을 시작하는 것을 제외하면 lastIndexOf(pattern)과 같다.
    splitSeparator() 하나의 스트링을 분리자를 기반으로 하여 서브스트링의 배열로 분리
    substring(startIndex) startIndex에서 시작하는 스트링의 서브스트링을 리턴
    substring(startIndex,endIndex) startIndex에서 시작하고, endIndex에서 끝나는 스트링의 서브스트링을 리턴
    toLowerCase() 소문자로 변환된 스트링의 복사본 리턴
    toString() 객체의 스트링 값을 리턴
    toUpperCase() 대문자로 변환된 스트링의 복사본 리턴

  • http://blog.naver.com/galad/140033732227

    출처 블로그 > 쿨쿨!!!
    원본 http://blog.naver.com/jeuskiss/140026516717

    자바스크립트로 한글문자 길이체크하기 


    function updateChar(length_limit)
    {
     
     var comment='';
     var frm = document.commentform;
     comment = eval("document.commentform.msg");
     
     var length = calculate_msglen(comment.value);
     document.commentform.nbyte.style.color = "#000000";
     
     frm.nbyte.value=length;
     
     if (length > length_limit) {
      alert("최대 " + length_limit + "byte이므로 초과된 글자수는 자동으로 삭제됩니다.");
      comment.value = comment.value.replace(/\r\n$/, "");
      comment.value = assert_msglen(comment.value, length_limit);
      frm.nbyte.value=length_limit;
     }
    }

    //바이트계산 함수
    function calculate_msglen(msg)
    {
     var nbytes = 0;

     for (i=0; i<msg.length; i++) {
      var ch = msg.charAt(i);
      if(escape(ch).length > 4) {
       nbytes += 2;
      } else if (ch == '\n') {
       if (msg.charAt(i-1) != '\r') {
        nbytes += 1;
       }
      } else if (ch == '<' || ch == '>') {
       nbytes += 4;
      } else {
       nbytes += 1;
      }
     }

     return nbytes;
    }

    //초과한 바이트에 해당하는 문자열 정리 함수
    function assert_msglen(message, maximum)
    {
     var inc = 0;
     var nbytes = 0;
     var msg = "";
     var msglen = message.length;

     for (i=0; i<msglen; i++) {
      var ch = message.charAt(i);
      if (escape(ch).length > 4) {
       inc = 2;
      } else if (ch == '\n') {
       if (message.charAt(i-1) != '\r') {
        inc = 1;
       }
      } else if (ch == '<' || ch == '>') {
       inc = 4;
      } else {
       inc = 1;
      }
      if ((nbytes + inc) > maximum) {
       break;
      }
      nbytes += inc;
      msg += ch;
     }
     return msg;
    }
    //-->
    </script>



    한글 체크


     var h;
     h = h_check(form.pe_id.value)
     if( h == -1) // 한글
     {
         alert("ID에 한글이나 특수 문자가 있습니다. \n\n회원 ID는 반드시 영문,숫자의 조합으로 4-12자리내에서 입력하십시오. ");
         form.pe_id.select();
         return false;
     }
     
     if (getLength(form.pe_id.value) < 4 || getLength(form.pe_id.value.length) > 12)
     {
         alert("회원 ID는 영문,숫자의 조합으로 4-12자리내에서 입력하십시오. ");
         form.pe_id.select();
         return false;
     }
     if (form.confirm_flag.value == "0")
     {
      alert("아이디 중복확인을 하십시오.");
         file://form.confirm_flag.focus();
         return false;
     }
    }


    function getLength(checkStr)
    {
     var strLength = 0;
     for (i = 0; i < checkStr.length; i++)
     {
      ch = checkStr.charAt(i);
      if (ch >= "가" && ch <= "힣")
       strLength += 2;
      else
       strLength += 1;
     }
     return (strLength);
    }
     
    function h_check(Objectname)
    {
     var intErr
     var strValue = Objectname
    // var strValue = Objectname.value
     var retCode = 0
     
     for (i = 0; i < strValue.length; i++)
     {
      var retCode = strValue.charCodeAt(i)
      var retChar = strValue.substr(i,1).toUpperCase()
      retCode = parseInt(retCode)
     
      if ((retChar < "0" || retChar > "9") && (retChar < "A" || retChar > "Z") && ((retCode > 255) || (retCode < 0)))
      {
       intErr = -1;
       break;
      }
     }
    return (intErr);
    }
     


    /** 한글을 2byte로 인식하여 length 체크 */
    function getByteLength( data ) {
        var len = 0;
        var str = data.substring(0);

        if ( str == null ) return 0;

        for(var i=0; i < str.length; i++) {
            var ch = escape(str.charAt(i));

            if( ch.length == 1 ) len++;
            else if( ch.indexOf("%u") != -1 )  len += 2;//Db가 한글을 3byte로 인식하여 2->3
            else if( ch.indexOf("%") != -1 ) len += ch.length/3;
        }

        return len;
    }

     

     

    JScript.chm

    자바스크립트 한글 도움말 파일

     

    정말 유용한 파일!!



    한글만 있을 경우 true == 한글 이외의 문자가 있으면 false
                                         이 방법이 루프를 돌려 글자를 하나씩 검사하
                                         는 것 보다 효과적이라서...

    ----------------------------------------------------------
    한글 패턴                    한글 이외의 문자 패턴
    [가-힣]                       [^가-힣]  

    단점 : 1. ㄱ-ㅎ,ㅏ-ㅣ의 홑 글자 입력시 한글로 인식하지 않음
             2. 한글 띄어 쓰기를 지원하지 않음
    장점 : 1. 오타 예방
             2. 실명 입력란에 추천함

    홑 자음[ㄱ-ㅎ]
    홑 모음[ㅏ-ㅣ]
    홑 자음과 모음 모두 [ㄱ-ㅣ]
    ------------------------------------------------------------

    한글과 space 패턴        한글과 space를 제외한 패턴
    [가-힣\x20]                [^가-힣\x20]

    장점 : 한글 띄어쓰기 지원
    -------------------------------------------------------------

    한글, space                          한글, space
    ?!.()  패턴                             ?!.() 를 제외한 패턴
    [가-힣\x20\?!\.\(\)]     [^가-힣\x20\?!\.\(\)]

    장점 : 제목에 사용하심이..
    -------------------------------------------------------------



    예) 한글과 space만 있으면 true 반환하도록 할 경우

    //==================================================================
    // 제외하고자하는 패턴이 없으면 true, 아니면 false 반환
    //==================================================================
    function check_char(value){
        // '제외하고 싶은 패턴'을 대입해 사용하세요.
        var pattern = new RegExp('[^가-힣\x20]', 'i');
        if (pattern.exec(value) != null) {
            // 패턴과 일치하는 경우
            return false;
        } else {
            return true;
        }
    }

     

    100 : Continue
    101 : Switching protocols
    200 : OK, 에러없이 전송 성공
    201 : Created, POST 명령 실행 및 성공
    202 : Accepted, 서버가 클라이언트 명령을 받음
    203 : Non-authoritative information, 서버가 클라이언트 요구 중 일부 만 전송
    204 : No content, 클라언트 요구을 처리했으나 전송할 데이터가 없음
    205 : Reset content
    206 : Partial content
    300 : Multiple choices, 최근에 옮겨진 데이터를 요청
    301 : Moved permanently, 요구한 데이터를 변경된 임시 URL에서 찾았음
    302 : Moved temporarily, 요구한 데이터가 변경된 URL에 있음을 명시
    303 : See other, 요구한 데이터를 변경하지 않았기 때문에 문제가 있음
    304 : Not modified
    305 : Use proxy
    400 : Bad request, 클라이언트의 잘못된 요청으로 처리할 수 없음
    401 : Unauthorized, 클라이언트의 인증 실패
    402 : Payment required, 예약됨
    403 : Forbidden, 접근이 거부된 문서를 요청함
    404 : Not found, 문서를 찾을 수 없음
    405 : Method not allowed, 리소스를 허용안함
    406 : Not acceptable, 허용할 수 없음
    407 : Proxy authentication required, 프록시 인증 필요
    408 : Request timeout, 요청시간이 지남
    409 : Conflict
    410 : Gone, 영구적으로 사용할 수 없음
    411 : Length required
    412 : Precondition failed, 전체조건 실패
    413 : Request entity too large,
    414 : Request-URI too long, URL이 너무 김
    415 : Unsupported media type
    500 : Internal server error, 내부서버 오류(잘못된 스크립트 실행시)
    501 : Not implemented, 클라이언트에서 서버가 수행할 수 없는 행동을 요구함
    502 : Bad gateway, 서버의 과부하 상태
    503 : Service unavailable, 외부 서비스가 죽었거나 현재 멈춤 상태
    504 : Gateway timeout
    505 : HTTP version not supported




    function onlynum(reguserid){   // 한글 아이디 안되게
    var i;
    var Alpha= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
     compstr = new String(reguserid);

      for (i =0;i<compstr.length;i++) {

        if (Alpha.indexOf(compstr.substring(i,i+1))<0) {
           return false;
        }
      }
       return true;
    }




    function checkKor(){

    if(event.keyCode>=33 && event.keyCode<=126){

    return false;

    }

    }

    한글이 들어간 문자열 길이 구하기

    <input type="text" onkeydown="return checkKor()">



    <script>
    function getLength(str)
    {
      return(str.length+(escape(str)+"%u").match(/%u/g).length-1);
    }
    </script>

     

     

    자바스크립트로 한글 , 초성 중성 종성 분리 (음소분리)

     

    <SCRIPT>

    font_cho = Array(
    'ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ',
    'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ',
    'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ' );

    font_jung = Array(
    'ㅏ', 'ㅐ', 'ㅑ', 'ㅒ', 'ㅓ',
    'ㅔ', 'ㅕ', 'ㅖ', 'ㅗ', 'ㅘ', 'ㅙ',
    'ㅚ', 'ㅛ', 'ㅜ', 'ㅝ', 'ㅞ', 'ㅟ',
    'ㅠ', 'ㅡ', 'ㅢ', 'ㅣ' );

    font_jong = Array(
    '', 'ㄱ', 'ㄲ', 'ㄳ', 'ㄴ', 'ㄵ', 'ㄶ', 'ㄷ', 'ㄹ',
    'ㄺ', 'ㄻ', 'ㄼ', 'ㄽ', 'ㄾ', 'ㄿ', 'ㅀ', 'ㅁ',
    'ㅂ', 'ㅄ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ' );



    stringtest = "ㅤㅊㅠㄺ";
    CompleteCode = stringtest.charCodeAt(0);
    UniValue = CompleteCode - 0xAC00;

    Jong = UniValue % 28;
    Jung = ( ( UniValue - Jong ) / 28 ) % 21;
    Cho = parseInt (( ( UniValue - Jong ) / 28 ) / 21);



    alert( font_cho[Cho] );
    alert( font_jung[Jung] );
    alert( font_jong[Jong] );

    </SCRIPT>

     

    This program uses UNICODE 2.0. So this consists of Johap code. There are many code through ancient Hangul to recent one. Here, I used consonant existing in UNICODE 12593~12622 in decimal. And used vowel existing in UNICODE 12623~12643 in decimal. The first consonant consists of 19 words, and the vowel consists of 21 words, and the final consonant consists of 28 words. We can make Hangul Johap code in the following way,

    (Hangul word) = 0xAC00 + chosung * 21 * 28 + jungsung * 28 + jongsung


    44032 + (초성문자코드 * 588) + (중성문자코드 * 28) + (종성문자코드)로 조합

     

    출처 블로그 > yir80님의 블로그
    원본 http://blog.naver.com/yir80/20028411922

    1. 개념잡기

    일반화 시킨 표현. 이것을 정규표현이라고 요약할 수 있을 것 같다.
    다음의 과정을 너무 쉽다 생각말고 따라오길 바란다.

     - 감잡기

    "12354" -> 숫자
    "asdfasf" -> 알파벳
    두 가지의 간단정규표현을 만들었다. 실생활의 보기와 비추어보자.
    "길이가 3인 이름!"
    위의 표현은 길이를 표시하는 방법이 없다. 조금 더 발전시켜서 "알파벳{3}"이런식
    으로 길이를 표현할 수 있도록 한다. 그리고, "알파벳"란 것도 너무 길다 "알"
    이라고 한 글자로 표현한다. 그러면 "길이가 3인 이름"은
     "알{3}"으로 표시가 가능하다.
    길이가 10인 숫자는 "수{10}"
    "길이가 1인 알파벳이 나오고 그 다음에 길이가 3인 숫자가 나오는 문자열"! ->
    "알{1}수{3}"얼핏이나마 감이 올 것이다.
    "첫 글자는A, 그 다음은 아무 알파벳 5글자" -> "A알{5}"

     - 조금 더

    아이디는 대개 첫 글자는 영문이고 두 번째부터는 영문이나 숫자가 온다. 이것을
    표현하기 위해선 이것 들 중에 하나란 의미를 갖는 새로운 표현이 필요하다.
    "a,b,c,d 중에 하나" -> [abcd]
    응용하면,
    "알파벳이나, 숫자중 하나" -> [알수]
    "[" 안에 있는 문자들의 순서는 의미가 없으며, 그 표현은 (클래스라고 한다.)  
    결국 한 글자를 말한다.
    위에서 말한 "첫 글자는 영문, 두 번째 부터는 영문이나 숫자가 11자"를
    표현하면, "알[알수]{11}".
    그런데, 실제로 모든 아이디가 12자인 것은 아니다, 대개 4자부터 12자를 지원한다.
    새로운 표현이 등장한다. "몇 자부터 몇 자"
    "A가 3글자부터 12자" -> "A{3,12}"
    "알파벳이나 숫자가 1자부터 100자" -> "[알수]{1,100}"
    이제 아이디를 다시 정의하자.
    "첫 글자는 영문, 영문이나 숫자가 3자부터 11자" -> "알[알수]{3,11}"

    2. 표현식

    지금 까지의 규칙에서 설명한 용어를 실제 정규표현에서 사용하는 표현으로 바꾸고,
    다른 세부적인 옵션에 대해 알아보자.

    \ : 다음의 글자가 특별한 문자임을 나타낸다. 때론, 그 다음 문자 자체를 의미하기
    도 한다.
    보기를 들면, "\n"은 문자"\"과 문자"n" 두 글자와 매치되는 것을 의미하는 것이 아
    닌,
    새줄(New Line)을 의미하며, "\\"은 첫 "\" 다음 문자인 "\" 자체를 의미한다.
    즉, "\\"은
    "\"과 매칭된다.

    ^ : 입력문자열의 맨 처음을 의미한다. (맨 첫 글자가 아니라, 맨 처음이란 문맥적 의
    미를
    말한다. 아주 중요하다) 기본적으로 정규표현은 입력 문자열의 한 줄에만 적용된다.
    하지만, 옵션에 따라 여러줄에 적용할 수도 있다. 그럴 경우에는 "^"는  "\n"
    나 "\r"
    다음의 위치를 의미한다.

    $ : "^"는 반대로 입력 문자열의 맨 끝을 의미한다. 역시 여러줄에 정규표현이 적용

    경우에는 "\n"이나 "\r"의 앞의 위치를 의미한다.

    * : 이 문자 앞의 표현이 0번내지 무한번 반복될 수 있음을 말한다.
    보기를 들면, /a*/은 "a", "", "aaaa", "aaaaa"와 매칭된다.
    (0번이상은 없어도 된다는 것을 의미한다.)

    + : *와 같지만, 0번이상이 아니라 1번이상이라는 점을 제외하곤 /*/와 같다.

    ? : 앞의 표현이 0번 또는 1번. /do(es)?/는 "do", "does"와 매칭된다.

    {n} : 앞의 표현이 n은 음수가 아닌 정수이어야 하며, 앞의 표현이
    n번 매치되는 것을 말한다.

    {n,} : 앞의 표현이 n은 음수가 아닌 정수이어야 하며, n번 이상
    매치되는 것을 말한다.

    {n,m} : 앞의 표현이 n번 이상 부터 m번 이하까지 매칭되는 것을
    말하며, /*/는 /{0,}/과 같으며, /+/는 /{1,}/과 /?/는 /{0,1}/으로
    표현 가능하다.

    . : "\n"을 제외한 한 글자를 뜻한다. 만일 모든 글자를 표현하고
    싶다면("\n"마저도 합친) /[.\n]/을 사용하면 된다.

    x|y : x 또는 y와 매칭된다. 보기를 들면, /z|food/는 "z" 또는
    "food"와 매칭된다. /(z|f)ood/는 "zood" 또는 "food"와 매칭된다.
    (참고로 괄호는 묶어준 것 이상의 의미가 있다.)

    (패턴) : 해당 패턴과 매칭시키고, 그 부분을 특정 변수에 담는다.
    그 변수 이름은 JScript는 $0~$9까지의 변수에 저장이 되고(Perl과 같다.),
    VBScript에서는 SubMatches 컬렉션에 저장된다.
    괄호기호 자체와 매치시키고 싶다면? /\(/와 /\)/를 사용한다.

    (?:패턴) : 해당 패턴과 매칭은 시키지만, 그 부분을 특정 변수에
    담지 않는다. 왜 이게 필요할까?
    위의 보기에서 /(z|f)ood/는 "zood" 또는 "food"와 매칭된다고 했는데,
    단순히 매칭의 목적으로 사용했지만, "zood"의 경우 "z"가 $0 이란
    변수에 저장이 되고 말았다. 이러한 것을 막기 위해서 사용하는 것이
     (?:패턴)이다.

    (?=패턴) : (?:패턴)과 동일하지만, 패턴과 일치한 부분이후부터
    다음 매치가 일어나지 않고 패턴 앞부터 다시 매칭이 진행된다.
    즉, 룩업(lookup, lookahead)을 할 뿐이다. /Windows (?=95|98|NT|2000)/ 은 
    "Windows 2000"의 "Windows" 부분과 매칭이 되며 다음 매칭은
    "2000" 다음 부터가 아닌 "Windows" 다음 부터 진행이 된다.

    (?!패턴) : (?=패턴)과 반대다. /Windows (?=95|98|NT|2000)/ 은 
    "Windows 3.1"의 "Windows" 부분과 매칭이 된다.

    [xyz] : "["안에 있는 표현중 하나를 의미한다.

    [^xyz] :  "["안에 있는 표현을 제외한 것중 하나를 의미한다.
    "[^abc]"는 "plain"의 "p"때문에 매칭된다.

    [a-z] : "a"부터 "z" 까지의 문자중 하나

    [^a-z] : "a"부터 "z" 까지의 문자를 제외한 하나

    \b : 단어의 경계(단어와 공백, "\n", "\r"의 사이)와 매칭된다.
    보기를 들면, "er\b"는 "never"와는 매칭되지만, "verb"와는 매칭되지 않는다.

    \B : 단어의 경계가 아닌 것과 매칭된다. "er\B"는 "verb"와는
    매칭되지만, "never"와는 매칭되지 않는다.

    \cx : Ctrl+x 키와 매칭된다. "\cc"는 Ctrl+C와 매칭된다. x의 범위는
    [a-zA-Z]이며, 만일 이 이외의 문자를 사용한다면 "\c"는 "c"와 동일하다.

    \d : [0-9]와 같다.

    \D : [^0-9]와 같다. 참고로 대문자는 소문자의 반대 의미를 갖는다.

    \f : 폼피드(form-feed) 문자를 의미하며, "\x0c"와 "\cL"과 동일하다.

    \n : 새 줄(newline)를 의미하며, "\x0a"와 "\cJ"와 동일하다.

    \r : 캐리지 리턴(carriage return)을 의미하며, "\x0d"와 "\cM"과 동일하다.

    \t : 탭. "\x09", "\cI"과 동일

    \v : 버티컬 탭. "\x0b", "\cK"과 동일

    \s : 화이트스페이스를 의미한다. 화이트스페이스란 공백, 탭, 폼피드,
    캐리지리턴등을 의미한다. [ \f\n\r\t\v]과 동일("\f"앞에 공백이 있다. 주의!)

    \S : "[^ \f\n\r\t\v]"

    \w : "_"를 포함한 일반적인 단어에 사용되는 문자를 말한다.
    "[A-Za-z0-9_]" 과 동일

    \W : "[^A-Za-z0-9_]"

    \xn : n은 2자리 16진수이며, 해당 16진수 코드와 매칭된다. "\x412"는 16진수
    41은 "A"이기 때문에 "A2"와 매칭된다.

    \num : 캡쳐한 매칭을 가리킨다(백레퍼런스, backreference).
    "(.)\1"은 연속된 두개의 문자열을 의미한다.
    \n : "\1"은 위에서 캡쳐한 매칭(backreference)를 가리킨다고 했는데,
    만일 이 패턴앞에 어떠한 n개의 캡쳐한 표현이 있다면 백레퍼런스이지만,
    그렇지 않은 경우에는 8진수로 간주하여 해당 코드의 문자와 매칭된다.

    \un : n은 4자리 UNICODE 이다. "\u00A9"은 copyright 심볼인 "ⓒ"와 매칭된다.


    greedy, non-greedy

    ? : 앞에서 설명했는데, 왜 또? 라고 생각할 것이다.
    ?은 문맥에 따라 특별한 의미를 갖는다.
    패턴 "o*"는 "foooood"와 매칭된다. 당연하다! 하지만, "f"앞의 "o"와
    매칭되는 것이 아니다!! "ooooo"와 매칭된 것이다. 즉, 기본으로
    정규표현 매칭은 가장 큰 범위를 선택한다. 이것을 greedy하다고 한다.
    하지만, 때론 작은 범위에 매칭시킬 필요가 있을 경우가 있다.
    (이의 적절한 보기는 잠시 후에 나온다.) "o*?"가 방금 말한
    non-greedy 매칭이다.
    수량관련 문자인 "*", "+", "?", "{n}", "{n,}", "{n,m}" 다음에 "?"가
    나오면 non-greedy 매칭이된다.
    잠시, 위에서 "o*?"가 "o"와 매칭된다고 했는데 이상하게 생각한 분이
    있었을 것이다. 맞다. "o*?"는 ""와 매칭되었다. "*"는 0개이상임을
    잊어선 안된다. "o+?"가 "o"와 매칭된다.

    4. 보기

     - 웹 주소

    "
    http://msdn.microsoft.com:80/scripting/default.htm"
    위의 주소를 표현할 수 있는 정규표현은 아래와 같다.
    /(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/
    $1 : http
    $2 : msdn.microsoft.com
    $3 : 80
    $4 : /scripting/default.htm

     - 중복된 단어를 하나로

    중복된 영어단어를 하나로 합치기 위해선, 우선 단어를 찾아야한다.
    그리고 단어는 앞 뒤가 단어의 경계이어야한다. (말이 참 이상하지만..)
    따라서, 아래와 같은 1차 정규표현을 얻을 수 있다.

    /\b([a-z]+)\b/

    연속해서 동일한 두개의 단어... 앞에서 캡쳐한 표현을 다시 활용하면 된다.
    그리고, 단어와 단어 사이엔 화이트스페이스가 있다.

    /\b([a-z]+)\s+\1\b/

     - HTML 태그 제거

    HTML문서에서 태그를 제거한 문서를 추출하고자 한다.
    태그는 "<"와 ">"로 감싸여 있다.

    /<.*>.*</.*>/

    그런데, 위의 정규표현을 HTML문서에 적용하여 해당 패턴을 "",
    빈문자열로 바꾸면 문서는 빈 문서가 되고 만다.

    <html>
    <title>...</title>
    <body>
    <font>.... </font>
    ...
    </body>
    greedy한 매칭이 기본값이라고 위에서 언급을 했다. 따라서,
    위의 HTML 문서를 보면, <html>....</body>로 생각할 수 있다.
    따라서, 문서 전체가 사라지는 것이다. 이것을 막기 위해선 "*"뒤에 "?"를
    추가하면 된다.                            

    /<.*?>.*?</.*?>/

    아직 끝나지 않았다. :)

    좀더 정제를 한다면, 올바른 HTML 문서는 <태그명>과 </태그명>이
    서로 일치한다. 이것도 적용한다면,

    /<.(*?)>.(*?)</\1>/

    위의 $1에 해당되는 부분을 좀 더 생각해보면, ">"를 제외한 문자로
    볼 수 있다. 따라서 최종적으로 아래와 같이 정리된다.

    /<(\w+)[^>]*?>(.*?)</\1>/

     - URL

    /(?:^|")(http|ftp|mailto):(?://)?(\w+(?:[\.:@]\w+)*?)(?:/|@)([^"\?]*?)(?:\?
    ([^\?"]*?))?(?:$|")/

     - float 상수

    /^(((+|-)?\d+(\.\d*)?)|((+|-)?(\d*\.)?\d+))$/  -1.1 1.1 .9 .8

     

    정규식 구문

    정규식은 일반 문자(예: a에서 z)와 메타문자 로 알려진 특수 문자로 구성된 텍스트 패턴입니다. 패턴은 텍스트 본문을 검색할 때 일치하는 문자열을 하나 이상 설명합니다. 정규식은 검색되는 문자열과 일치하는 문자 패턴을 찾는 템플릿의 역할을 합니다.

    일반적으로 볼 수 있는 몇 가지 정규식 예는 다음과 같습니다.

    JScript VBScript 검색
    /^\[ \t]*$/ "^\[ \t]*$" 빈 줄을 찾습니다.
    /\d{2}-\d{5}/ "\d{2}-\d{5}" 2자리, 하이픈 및 5자리로 구성된 ID 번호를 찾습니다.
    /<(.*)>.*<\/\1>/ "<(.*)>.*<\/\1>" HTML 태그를 찾습니다.

    아래 표는 정규식 컨텍스트에 사용되는 모든 메타문자와 메타문자의 동작을 보여줍니다.

    문자 설명
    \ 그 다음 문자를 특수 문자, 리터럴, 역참조, 또는 8진수 이스케이프로 표시합니다. 예를 들어, "n"은 문자 "n"을 찾고 "\n"은 줄 바꿈 문자를 찾습니다. "\\" 시퀀스는 "\"를 찾고 "\("는 "("를 찾습니다.
    ^ 입력 문자열의 시작 위치를 찾습니다. Multiline 속성이 설정되어 있으면 ^는 '\n' 또는 '\r'앞의 위치를 찾습니다.
    $ 입력 문자열의 끝 위치를 찾습니다. Multiline 속성이 설정되어 있으면 $는 '\n' 또는 'r'뒤의 위치를 찾습니다.
    * 부분식의 선행 문자를 0개 이상 찾습니다. 예를 들어, "zo*"는 "z", "zoo" 등입니다. *는 {0,}와 같습니다.
    + 부분식의 선행 문자를 한 개 이상 찾습니다. 예를 들어, "zo+"는 "zo", "zoo" 등이지만 "z"는 아닙니다. +는 {1,}와 같습니다.
    ? 부분식의 선행 문자를 0개 또는 한 개 찾습니다. 예를 들어, "do(es)?"는 "do" 또는 "does"의 "do"를 찾습니다. ?는 {0,1}과 같습니다.
    { n } n 은 음이 아닌 정수입니다. 정확히 n 개 찾습니다. 예를 들어, "o{2}"는 "Bob"의 "o"는 찾지 않지만 "food"의 o 두 개는 찾습니다.
    { n ,} n 은 음이 아닌 정수입니다. 정확히 n 개 찾습니다. 예를 들어, "o{2}"는 "Bob"의 "o"는 찾지 않지만 "foooood"의 모든 o는 찾습니다. "o{1,}"는 "o+"와 같고, "o{0,}"는 "o*"와 같습니다.
    { n , m } m n 은 음이 아닌 정수입니다. 여기서 m n 보다 크거나 같습니다. 최소 n 개, 최대 m 개 찾습니다. 예를 들어, "o{1,3}"은 "fooooood"의 처음 세 개의 o를 찾습니다. "o{0,1}"은 "o?"와 같습니다. 쉼표와 숫자 사이에는 공백을 넣을 수 없습니다.
    ? 이 문자가 다른 한정 부호(*, +, ?, { n }, { n ,}, { n , m })의 바로 뒤에 나올 경우 일치 패턴은 제한적입니다. 기본값인 무제한 패턴은 가능한 많은 문자열을 찾는 데 반해 제한적인 패턴은 가능한 적은 문자열을 찾습니다. 예를 들어, "oooo" 문자열에서 "o+?"는 "o" 한 개만 찾고, "o+"는 모든 "o"를 찾습니다.
    . "\n"을 제외한 모든 단일 문자를 찾습니다. "\n"을 포함한 모든 문자를 찾으려면 '[.\n]' 패턴을 사용하십시오.
    ( pattern ) pattern 을 찾아 검색한 문자열을 캡처합니다. 캡처한 문자열은 VBScript의 경우 SubMatches 컬렉션, Jscript의 경우 $0 ... $9 속성을 이용하여 결과로 나오는 Matches 컬렉션에서 추출할 수 있습니다. 괄호 문자인 ( )를 찾으려면 "\(" 또는 "\)"를 사용하십시오.
    (?: pattern ) pattern 을 찾지만 검색한 문자열을 캡처하지 않습니다. 즉, 검색한 문자열을 나중에 사용할 수 있도록 저장하지 않는 비캡처 검색입니다. 이것은 패턴의 일부를 "or" 문자(|)로 묶을 때 유용합니다. 예를 들어, 'industr(?:y|ies)는 'industry|industries'보다 더 경제적인 식입니다.
    (?= pattern ) 포함 예상 검색은 pattern 과 일치하는 문자열이 시작하는 위치에서 검색할 문자열을 찾습니다. 이것은 검색한 문자열을 나중에 사용할 수 있도록 캡처하지 않는 비캡처 검색입니다. 예를 들어, "Windows(?=95|98|NT|2000)"는 "Windows 2000"의 "Windows"는 찾지만 "Windows 3.1"의 "Windows"는 찾지 않습니다. 예상 검색은 검색할 문자열을 찾은 후 예상 검색 문자열을 구성하는 문자 다음부터가 아니라 마지막으로 검색한 문자열 바로 다음부터 찾기 시작합니다.
    (?! pattern ) 제외 예상 검색은 pattern 과 일치하지 않는 문자열이 시작하는 위치에서 검색할 문자열을 찾습니다. 이것은 검색한 문자열을 나중에 사용할 수 있도록 캡처하지 않는 비캡처 검색입니다. 예를 들어, "Windows(?!95|98|NT|2000)"는 "Windows 3.1"의 "Windows"는 찾지만 "Windows 2000"의 "Windows"는 찾지 않습니다. 예상 검색은 검색할 문자열을 찾은 후 예상 검색 문자열을 구성하는 문자 다음부터가 아니라 마지막으로 검색한 문자열 바로 다음부터 찾기 시작합니다.
    x | y x 또는 y 를 찾습니다. 예를 들어, "z|food"는 "z" 또는 "food"를 찾습니다. "(z|f)ood"는 "zood" 또는 "food"를 찾습니다.
    [ xyz ] 문자 집합입니다. 괄호 안의 문자 중 하나를 찾습니다. 예를 들어, "[abc]"는 "plain"의 "a"를 찾습니다.
    [^ xyz ] 제외 문자 집합입니다. 괄호 밖의 문자 중 하나를 찾습니다. 예를 들어, "[^abc]"는 "plain"의 "p"를 찾습니다.
    [ a-z ] 문자 범위입니다. 지정한 범위 안의 문자를 찾습니다. 예를 들어, "[a-z]"는 "a"부터 "z" 사이의 모든 소문자를 찾습니다.
    [^ a-z ] 제외 문자 범위입니다. 지정된 범위 밖의 문자를 찾습니다. 예를 들어, "[^a-z]"는 "a"부터 "z" 사이에 없는 모든 문자를 찾습니다.
    \b 단어의 경계, 즉 단어와 공백 사이의 위치를 찾습니다. 예를 들어, "er\b"는 "never"의 "er"는 찾지만 "verb"의 "er"는 찾지 않습니다.
    \B 단어의 비경계를 찾습니다. "er\B"는 "verb"의 "er"는 찾지만 "never"의 "er"는 찾지 않습니다.
    \c x X 가 나타내는 제어 문자를 찾습니다. 예를 들어, \cM은 Control-M 즉, 캐리지 리턴 문자를 찾습니다. x 값은 A-Z 또는 a-z의 범위 안에 있어야 합니다. 그렇지 않으면 c는 리터럴 "c" 문자로 간주됩니다.
    \d 숫자 문자를 찾습니다. [0-9]와 같습니다.
    \D 비숫자 문자를 찾습니다. [^0-9]와 같습니다.
    \f 폼피드 문자를 찾습니다. \x0c와 \cL과 같습니다.
    \n 줄 바꿈 문자를 찾습니다. \x0a와 \cJ와 같습니다.
    \r 캐리지 리턴 문자를 찾습니다. \x0d와 \cM과 같습니다.
    \s 공백, 탭, 폼피드 등의 공백을 찾습니다. "[ \f\n\r\t\v]"와 같습니다.
    \S 공백이 아닌 문자를 찾습니다. "[^ \f\n\r\t\v]"와 같습니다.
    \t 탭 문자를 찾습니다. \x09와 \cI와 같습니다.
    \v 수직 탭 문자를 찾습니다. \x0b와 \cK와 같습니다.
    \w 밑줄을 포함한 모든 단어 문자를 찾습니다. "[A-Za-z0-9_]"와 같습니다.
    \W 모든 비단어 문자를 찾습니다. "[^A-Za-z0-9_]"와 같습니다.
    \x n n 을 찾습니다. 여기서 n 은 16진수 이스케이프 값입니다. 16진수 이스케이프 값은 정확히 두 자리여야 합니다. 예를 들어, '\x41'은 "A"를 찾고 '\x041'은 '\x04'와 "1"과 같습니다. 정규식에서 ASCII 코드를 사용할 수 있습니다.
    \ num num 을 찾습니다. 여기서 num 은 양의 정수입니다. 캡처한 문자열에 대한 역참조입니다. 예를 들어, '(.)\1'은 연속적으로 나오는 동일한 문자 두 개를 찾습니다.
    \ n 8진수 이스케이프 값이나 역참조를 나타냅니다. \ n 앞에 최소한 n개의 캡처된 부분식이 나왔다면 n 은 역참조입니다. 그렇지 않은 경우 n 이 0에서 7 사이의 8진수이면 n 은 8진수 이스케이프 값입니다.
    \ nm 8진수 이스케이프 값이나 역참조를 나타냅니다. \ nm 앞에 최소한 nm개의 캡처된 부분식이 나왔다면 nm 은 역참조입니다. \ nm 앞에 최소한 n개의 캡처가 나왔다면 n 은 역참조이고 뒤에는 리터럴 m이 옵니다. 이 두 경우가 아닐 때 n과 m이 0에서 7 사이의 8진수이면 \ nm 은 8진수 이스케이프 값 nm을 찾습니다.
    \ nml n 이 0에서 3 사이의 8진수이고 m l 이 0에서 7 사이의 8진수면 8진수 이스케이프 값 nml 을 찾습니다.
    \u n n 은 4 자리의 16진수로 표현된 유니코드 문자입니다. 예를 들어, \u00A9는 저작권 기호(©)를 찾습니다.


    --------------------------------------------------------------------------------
    Visual Basic Scripting Edition에서 정규 표현식 기능 이용하기
    --------------------------------------------------------------------------------

    정규 표현식이란 무엇인가요?
    정규 표현식이란 무엇일까요? 정규 표현식은 복잡한 패턴 매칭 기능과 텍스트형 검색-대체 알고리즘을 개발할 수 있는 툴을 제공합니다. Perl, egrep, awk, 또는 sed 개발자에게 정규 표현식이 무엇이냐고 물어보면, 정규 표현식은 텍스트와 데이터를 조작할 때 사용할 수 있는 가장 강력한 유틸리티라고 대답할 것입니다. 개발자는 패턴을 만들어 특정 문자열을 매치키시킴으로써 데이터를 검색하거나 추출하거나 교체하는 일을 완벽하게 제어할 수 있습니다. 간단히 말해서, 정규 표현식을 정복하면 데이터도 정복할 수 있는 것입니다.

    여기서는, VBScript 정규 표현식과 관련된 모든 개체를 설명하고, 일반적인 정규 표현식 패턴을 간략하게 살펴보고, 실제 코드로 정규 표현식을 사용하는 예를 들어보도록 합시다.

    VBScript RegExp 개체
    VBScript 5.0 버전은 정규 표현식을 하나의 개체로서 제공합니다. VBScript RegExp 개체는 설계 면에서 JScript의 RegExp 및 String 개체와 비슷하고, 구문 면에서는 Visual Basic과 일치합니다. 먼저, VBScipt RegExp 개체의 속성과 메소드에 관해 알아봅시다. VBScript RegExp 개체는 사용자에게 세 개의 속성과 세 개의 메소드를 제공합니다.

    속성  메소드  
    Pattern  Test(검색-문자열)  
    IgnoreCase  Replace (검색-문자열, 대체-문자열)  
    Global  Execute (검색-문자열  

    Pattern - 정규 표현식을 정의하는 데 사용되는 문자열. 이 속성은 정규 표현식 개체를 사용하기 전에 먼저 설정해야 합니다. Pattern에 관한 내용은 아래에 자세히 설명되어 있습니다.
    IgnoreCase - 문자열 안에서 일치하는 문자가 발생할 모든 가능성에 대해 정규 표현식을 테스트해야 하는지를 나타내는 부울 논리 속성입니다. IgnoreCase의 기본 설정 값은 False입니다.
    Global - 문자열 안에서 일치하는 문자가 발생할 모든 가능성에 대해 정규 표현식을 테스트해야 하는지 여부를 나타내는 읽기 전용 부울 논리 속성입니다. Global의 기본 설정 값은 False입니다.
    Test (문자열) - Test 메소드는 문자열을 매개 변수로 받아 그 문자열이 정규 표현식에 일치하면 True를 반환하고 그렇지 않으면 False를 반환합니다.
    Replace (검색-문자열, 대체-문자열) - Replace 메소드는 두 개의 문자열을 매개 변수로 받습니다. 검색-문자열 안에 정규 표현식과 일치하는 문자열이 있으면, 그 문자열을 대체-문자열로 바꾸고, 바뀐 새로운 문자열을 반환합니다. 만일 일치하는 문자열이 없으면, 원래의 검색-문자열을 반환합니다.
    Execute (검색-문자열) - Execute 메소드는 Matches 컬렉션 개체를 반환하는 점만 제외하면 Replace 메소드의 작동과 비슷합니다. Matches 컬렉션 개체에는 정규 표현식에 일치하는 각 문자열에 대한 Match 개체가 들어 있습니다. 이 메소드는 원래의 문자열을 변경하지 않습니다.
    더 자세한 내용과 예제 코드는,Microsoft Scripting Site  사이트를 참고하시기 바랍니다.

    VBScript Matches 컬렉션 개체
    앞에서 말했듯이, Matches 컬렉션 개체는 Execute 메소드를 실행한 경우에만 반환됩니다. 이 컬렉션 개체는 0개 이상의 Match 개체를 포함할 수 있으며, 이 개체의 속성은 읽기 전용입니다.

    속성  
    Count  
    Item  

    Count -컬렉션 안에 있는 Match 개체의 개수를 나타내는 읽기 전용 값입니다.
    Item - Matches 컬렉션 개체에서 Match 개체를 임의로 액세스할 수 있게 만드는 읽기 전용 값입니다. For-Next 루프를 사용하면, Matches 컬렉션 개체에서 Match 개체를 순서대로 액세스할 수도 있습니다.
    더 자세한 내용과 예제 코드는, Microsoft Scripting Site  를 참고하시기 바랍니다.

    VBScript Match 개체
    각 Mathes 개체에는 0개 이상의 Match 개체가 들어 있습니다. 이 Match 개체들은 정규 표현식을 사용했을 때 성공적으로 일치한 문자열을 나타냅니다. 이 개체의 속성은 읽기 전용이며 일치하는 각 문자열에 대한 정보를 저장합니다.

    속성  
    FirstIndex  
    Length  
    Value  

    FirstIndex - 원래 문자열 안에서 정규 표현식에 일치하는 문자열의 위치를 나타내는 읽기 전용 값입니다. 이 색인은 위치를 기록하는데 0 기준 오프셋(문장의 첫 위치가 0번째임을 뜻함)을 사용합니다.
    Length - 일치된 문자열의 전체 길이를 나타내는 읽기 전용 값입니다
    Value - 일치된 값이나 텍스트를 나타내는 읽기 전용 값입니다. 이 값은Match 개체를 액세스할 때 사용되는 기본 값이기도 합니다.
    더 자세한 내용과 예제 코드는, Microsoft Scripting Site  를 참고하시기 바랍니다.

    패턴은 어떤 형태인가?
    자, 지금까지는 이 모든 것이 지나치게 훌륭하고 환상적인 것으로 느껴지셨겠지만 실제는 어떨까요? 정규 표현식은 그 자체가 하나의 언어라고 할 수 있지만, Perl에 익숙한 사용자들이라면 누구나 쉽게 사용할 수 있습니다. VBScript는 Perl로부터 패턴 셋을 유도하기 때문에, 주요 기능도 Perl과 비슷합니다. 그러면, 정규 표현식을 정의하는 데 사용되는 패턴 셋 몇 가지를 살펴보도록 합시다. 패턴 셋은 여러 범주와 영역으로 분류할 수 있습니다.

    포지션 매칭

    포지션 매칭은 ^와 $(을)를 사용하여 문자열의 시작이나 끝을 검색합니다. 패턴 속성을 "^VBScript"로 설정할 경우, "VBScript is cool."에는 일치하지만, "I like VBScript."에는 일치하지 않습니다.

    기호 기능
    ^  문자열의 시작만 비교합니다

    "^A"는 "An A+ for Anita."의 첫번째 "A"를 비교합니다.  
    $  문자열의 끝을 비교합니다.

    "t$"는 "A cat in the hat"의 마지막 "t"를 비교합니다.  
    \b  임의의 워드 영역을 비교합니다

    "ly\B"는 "possibly tomorrow."의 "ly"를 비교합니다  
    \B  Matches any non-word boundary

     


    리터럴

    리터럴은 영숫자 문자, ASCII, 8진수 문자, 16진수 문자, UNICODE, 또는 특수 구분 문자 등을 모두 총칭하는 말입니다. 특별한 의미를 갖고 있는 몇몇 문자는 구분해야 합니다. 이들 특수 문자를 비교하려면, 정규 표현식을 문자 앞에 \를 사용해야 합니다.

    기호 기능
    영숫자  영문자와 숫자를 비교합니다.  
    \n  새로운 라인을 비교합니다  
    \f  용지 공급을 비교합니다  
    \r  캐리지 리턴을 비교합니다.  
    \t  가로 탭을 비교합니다.  
    \v  수평 탭을 비교합니다.  
    \?  ?(을)를 비교합니다.  
    \*  *(을)를 비교합니다.  
    \+  +(을)를 비교합니다.  
    \.  . (을)를 비교합니다.  
    \|  |(을)를 비교합니다.  
    \{  {(을)를 비교합니다.  
    \}  }(을)를 비교합니다.  
    \\  \(을)를 비교합니다.  
    \[  [(을)를 비교합니다.  
    \]  ] (을)를 비교합니다.  
    \(  ((을)를 비교합니다.  
    \)  ) (을)를 비교합니다.  
    \xxx  8진수 xxx로 표시된 ASCII 문자를 비교합니다.

    "\50"은 "(" 또는 chr (40) (을)를 비교합니다.  
    \xdd  16진수 dd로 표시된 ASCII 문자를 비교합니다.

    "\x28"은 "(" 또는 chr (40) (을)를 비교합니다.  
    \uxxxx  UNICODE xxxx로 표시된 ASCII 문자를 비교합니다.

    "\u00A3"은 "&pound;"를 비교합니다.  

    문자 클래스

    문자 클래스를 사용하면 괄호 [] 안에 식을 삽입하여 사용자에 의해 정의된 그룹을 만들 수 있습니다. 문자 클래스의 문자들을 제외한 나머지 문자들을 사용하려면 [] 안에 ^(을)를 첫번째 문자로 삽입해야 합니다. 또한, 문자의 범위를 지정할 때는 대시를 사용합니다. 예를 들어, 정규 표현식 "[^a-zA-Z0-9]"(은)는 영문자와 숫자를 제외한 모든 문자를 비교합니다. 추가로 구분 문자와 리터럴로 묶인 문자셋도 있습니다.


    기호 기능
    [xyz]  문자셋 안에 포함되어 있는 임의의 한 문자를 비교합니다.

    "[a-e]" (은)는 "basketball" 안의 "b"를 비교합니다.  
    [^xyz]  문자 셋 안에 포함되어 있지 않은 임의의 한 문자를 비교합니다.

    "[^a-e]"는 "basketball" 안의 "s"를 비교합니다.  
    .  \n을 제외한 임의의 문자를 비교합니다.  
    \w  임의의 워드 문자를 비교합니다.
    [a- zA-Z_0-9]와 동일함.  
    \W  워드 문자를 제외한 임의의 문자를 비교합니다.
    [^a-zA-Z_0-9]와 동일함.  
    \d  임의의 숫자를 비교합니다. [0-9].  
    \D  숫자를 제외한 임의의 문자를 비교합니다.
    [^0-9]와 동일함.  
    \s  임의의 공백 문자를 비교합니다.
    [ \t\r\n\v\f]와 동일함.  
    \S  공백 문자가 아닌 임의의 문자를 비교합니다.
    [^ \t\r\n\v\f]와 동일함.  

    반복

    반복 매칭을 사용하면 정규 표현식 안에 있는 특정 절에 대한 검색을 여러 번 수행할 수 있습니다. 반복 매칭에서는 어떤 요소가 정규 표현식 안에서 몇 번 반복될 것인지를 지정할 수 있습니다.

    기호 기능  
    {x}  {x} 정규 표현식을 x번 비교합니다.

    "\d{5}"는 5개의 숫자를 비교합니다.  
    (x,}  정규 표현식을 x번 이상 비교합니다.

    "\s{2,}"는 최소한 두 개의 공백 문자를 비교합니다  
    {x,y}  정규 표현식을 x부터 y번까지 비교합니다.

    "\d{2,3}"는 2개 이상 3개 미만의 숫자를 비교합니다. . 
    ?  0번 또는 한 번 비교합니다. {0,1}와 동일함.

    "a\s?b"는 "ab" 또는 "a b"를 비교합니다.  
    *  0번 이상 비교합니다. {0,}와 동일함.  
    +  한번 이상 비교합니다.{1,}과 동일함.  


    교체와 그룹핑

    교체와 그룹핑은 보다 복잡한 정규 표현식을 만들 때 사용합니다. 교체와 그룹핑 기술은 정규 표현식 안에 복잡한 절을 만들고, 보다 많은 융통성과 제어 능력을 제공합니다.

    기호 기능  
    ()  절을 그룹핑하여 절을 만듭니다. 중첩하여 사용할 수도 있습니다.

    "(ab)?(c)"는 "abc" 또는 "c"를 비교합니다.  
    |  교체는 여러 절을 하나의 정규 표현식으로 조합한 다음 개별적인 절을 비교합니다.

    "(ab)|(cd)|(ef)"는 "ab" 또는 "cd" 또는 "ef"를 비교합니다.  

    역방향 참조

    프로그래머는 역방향 참조를 통해 정규 표현식의 일부를 다시 참조할 수 있습니다. 그 방법은 괄호와 백슬레시(\) 뒤에 한 개의 숫자를 사용하는 것입니다. 첫 번째 괄호 절은 \1로 참조되고 두 번째 괄호 절은 \2로 참조되는 식입니다.

    기호 기능  
    ()\n  왼쪽 괄호에 있는 표현식을 n번 반복해서 문장을 비교합니다.

    "(\w+)\s+\1"는 "hubba hubba" 같이, 한 열 안에서 두 번 나타나는 임의의 워드를 비교합니다.."  

    예제로 확인하기!
    이 예제는 지금까지 설명한 것을 적용한 것으로, 정규 표현식을 이용하여 유효한 입력 값이 입력되어 있는지 검사하는 간단한 응용 프로그램입니다. 사용자가 유효한 값을 입력할 때까지 사용자에게 입력을 요구하는 프롬프트가 반복적으로 나타납니다. 먼저 초기 패턴을 자세히 설명하겠습니다.

    "^\s*((\$\s?)|(&pound;\s?))?((\d+(\.(\d\d)?)?)|(\.\d\d))\s*(UK|GBP|GB|USA|US|USD)?)\s*$"

    "^\s*…" 와 "…\s*$" - 앞과 뒤에 몇 개의 공백 문자든지 올 수 있음을 나타내며, 입력은 반드시 라인 자체 위에 있어야 합니다.
    "((\$\s?)|(?\s?))?" - 옵션 공백 앞에 오는 옵션 $ 또는 £ 기호를 나타냅니다..
    "((\d+(\.(\d\d)?)?)|(\.\d\d))" - 생략 가능한 십진수 소수점 2자리 또는 십진수 소수점 2 자리수 앞에 오는 한 자리 이상의 숫자를 찾습니다. 이 말은 6., 23.33, .88와 같은 숫자는 사용 가능하나 5.5는 사용할 수 없음을 의미합니다.
    "\s*(UK|GBP|GB|USA|US|USD)?" - 문자열에 대하여 생략 및 사용이 가능하고 인수 앞에서 유효한 공백 문자의 수를 의미합니다.
    본 예제의 경우, 정규 표현식은 사용자의 US 달러 또는 영국 파운드 입력 여부를 결정하는 데 사용됩니다. 필자는 £, UK, GBP, 또는 GB 문자열을 검색하고 있습니다. 정규 표현식 결과가 참이면 사용자는 영국 파운드 단위의 액수를 입력한 것이라고 보면 됩니다. 그렇지 않다면 USD 통화를 사용한 것이겠지요.

    이 코드를 사용하려면 코드를 CurrencyEx.vbs로 저장하고 Windows Script Host를 이용해 코드를 실행시킨 다음 VB에 복사하거나(이 경우, Microsoft VBScript 정규 표현식에 참조를 추가할 필요가 있음) HTML 파일에 코드를 포함시킵니다.

    Sub CurrencyEx
    Dim inputstr, re, amt
    Set re = new regexp  'Create the RegExp object

    'Ask the user for the appropriate information
    inputstr = inputbox("I will help you convert USA and CAN currency. Please enter the amount to convert:")
    'Check to see if the input string is a valid one.
    re.Pattern = "^\s*((\$\s?)|(&pound;\s?))?((\d+(\.(\d\d)?)?)|(\.\d\d))\s*(UK|GBP|GB|USA|US|USD)?)\s*$"
    re.IgnoreCase = true
    do while re.Test(inputstr) <> true
    'Prompt for another input if inputstr is not valid
    inputstr = inputbox("I will help you convert USA and GBP currency. Please enter the amount to(USD or GBP):")

    loop
    'Determine if we are going from GBP->US or USA->GBP
    re.Pattern = "&pound;|UK|GBP|GB"
    if re.Test(inputstr) then
    'The user wants to go from GBP->USD
     
    re.Pattern = "[a-z$&pound; ]"
    re.Global = True
    amt = re.Replace(inputstr, "")
    amt = amt * 1.6368
    amt = cdbl(cint(amt * 100) / 100)
    amt = "$" & amt
    else
    'The user wants to go from USD->GBP

    re.Pattern = "[a-z$&pound; ]"
    re.Global = True
    amt = re.Replace(inputstr, "")
    amt = amt * 0.609
    amt = cdbl(cint(amt * 100) / 100)
    amt = "&pound;" & amt
    end if

    msgbox ("Your amount of: " & vbTab & inputstr & vbCrLf & "is equal to: " & vbTab & amt)
    End sub


    더욱 강력한 파워를!
    Visual Basic 개발자들이 정규 표현식을 사용할 수 있도록 VBScript 정규 표현식 엔진은 COM 개체로 구현되어 왔습니다. 이 경우, 정규 표현식은 보다 강력한 힘을 발휘하게 되는데 즉, Visual Basic 또는 C와 같은 VBScript 외의 다양한 소스로부터 호출이 가능하기 때문입니다. 예컨대, 필자는 Outlook(R) 97, Outlook 98 또는 Outlook 2000의 접속 목록을 통해 내용을 추적하고 특정 도시에 사는 접속자 이름을 반환하는 작은 Visual Basic 응용 프로그램을 만든 경험이 있습니다.

    이 프로그램은 매우 간단합니다. 먼저 사용자는 검색할 대상 도시명을 입력하고, 구분 표시에는 쉼표를 사용합니다. 그런 다음, Outlook에 작성할 새 접속 폴더의 이름을 입력합니다. 각 접속이 일치하면 이 내용은 새로 작성된 접속 폴더에 복사됩니다.

    Microsoft VBScript 정규 표현식 개체 라이브러리에 참조를 추가할 경우 몇 가지 유용한 조기 바인딩 기능(early binding)을 사용할 수 있습니다. 이 조기 바인딩 개체는 몇 가지 이점을 제공하는데 즉, 속도가 빠르고 코딩 프로그램 사용이 간편하다는 점입니다. "new RegExp"가 즉시 사용되므로 사용자는 개체에 참조를 추가하고 VBScript코드를 오려내어 VB에 그대로 붙일 수 있습니다.

    이러한 이유로 필자 또한 정규 표현식과 동일한 방법을 사용하여 Outlook 9.0 개체 라이브러리를 참조한 적이 있습니다. 물론, 여러분은 여전히 CreateObject() (을)를 사용하여 COM 호출을 생성시킬 수도 있으나 상기 방법을 더 간편하게 사용할 수 있을 것입니다. 이 개체들을 작성한 후 간단한 코드를 사용하여 도시명과 일치하는 폴더와 트리를 액세스할 수 있습니다. 본인은 2개의 모음 개체를 가지는 작은 도움 함수 compareCollectionObjects(x,y)(을)를 사용/비교하여 일치 여부를 확인합니다.

    이 프로그램을 사용하려면 단순히 코드를 VB(참조 추가에 필요함)에 복사한 다음 FindCityContacts() 함수를 호출하면 됩니다. . 


    Sub FindCityContacts()

        Dim strTemp
        Dim index
        Dim citySearch
        Dim myNameSpace, myContacts, newCityContacts, newCityContactsName
        Dim contact
        Dim newContact

        'Set the early binding objects
        Dim re as New RegExp  
        Dim myApp as New Outlook.Application

        re.Global = True
        re.IgnoreCase = True

        citySearch = InputBox("Please enter the cities of your search, separated by commas.")
        newCityContactsName = InputBox("Please enter the new contact folder name")

        'Set some of the objects and create the new Contacts folder
        Set myNameSpace = myApp.GetNamespace("MAPI")
        'olFolderContacts = 10
        Set myContacts = myNameSpace.GetDefaultFolder(10)  
        Set newCityContacts = myContacts.Folders.Add(newCityContactsName)

        'Set cities, using regular expressions to contain the city names
        re.Pattern = "[^,]+"
        Set cities = re.Execute(citySearch)
        For Each city In cities

           'Set citytokens to be the individual tokens in the city name
           'Then we compare them to the address tokens in each contact
            re.Pattern = "[^ ]+"
            Set citytokens = re.Execute(city)

            For i = 1 to myContacts.Items.Count
                re.Pattern = "[^ ]+"
                Set contact = myContacts.Items.Item(i)

                Set HomeAddressCityTokens = re.Execute(contact.HomeAddressCity)
                If compareCollectionObjects(HomeAddressCityTokens, citytokens) = 1 Then

                    Set newContact = contact.Copy
                    newContact.Move newCityContacts
                End If

                Set OtherAddressCityTokens = re.Execute(contact.OtherAddressCity)
                If compareCollectionObjects(OtherAddressCityTokens, citytokens) = 1 Then
                    Set newContact = contact.Copy
                    newContact.Move newCityContacts
                End If

                Set BusinessAddressCityTokens = re.Execute(contact.BusinessAddressCity)
                If compareCollectionObjects(BusinessAddressCityTokens, citytokens) = 1 Then
                    Set newContact = contact.Copy
                    newContact.Move newCityContacts
                End If
            Next
        Next

    MsgBox "done"

    End Sub

    'This function is provided as a helper-function
    ' to compare two collection objects.
    Function compareCollectionObjects(x, y)

        Dim index
        Dim flag
        flag = 1

        If x.Count <> y.Count Then
            flag = 0
        Else
            index = x.Count

            For i = 0 To (index - 1)
                If StrComp(x.Item(i), y.Item(i), 1) Then
                    flag = 0
                End If
            Next
        End If

        compareCollectionObjects = flag

    End Function


    넘치는 정보!
    앞에서 보았듯이, Microsoft는 정규 표현식(버전 5.0)을 이용하여 VBSscript를 강화시키는데, 이것은 VBScript와 Jscript 비교에서 가장 중요한 부분이었습니다. 스크립팅 엔진 버전 5.0에서 우리는 VBScript의 기능을 향상시키는 데 특히 비중을 두었습니다. 이제 여러분은 정규 표현식을 추가시킴으로써 데이터를 보다 확실하게 관리하고 그 효과를 높일 수 있게 되었으며, 클라이언트와 서버에서 보다 강력한 웹 응용 프로그램을 만들 수 있게 되었습니다.

    출처 : http://tong.nate.com/gabriel0000/11860659

    '프로그래밍 > Web' 카테고리의 다른 글

    [펌] 자바스크립트의 모든것  (0) 2007.11.28
    [펌] 자바스크립트로 한글 처리  (0) 2007.11.28
    02 실전에서 쓰는 소스  (0) 2007.11.28
    01 로그인....  (0) 2007.11.28
    [펌] Filter 를 이용한 한글 인코딩 적용  (0) 2007.11.27

    02 실전에서 쓰는 소스

    프로그래밍/Web 2007. 11. 28. 09:07 Posted by galad

    ★ 특정 인덱스 선택 시 다음 것들이 차례로 바뀌는 것.

    ex) 영화표 예매 등에 쓰이는 것


    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
        <HEAD>
        <TITLE> 상품 선택 자바스크립트 </TITLE>
        <SCRIPT LANGUAGE="JavaScript">
        <!--
            var product = new Array();
            product[0] = "fashion";
            product[1] = "문구";

            var category = new Array();

            category[0] = new Array("옷","시계","신발");
            category[1] = new Array("사무용품","학용품");

            var sub = new Array();
            sub[0] = new Array();
            sub[0][0] = new Array("속옷","겉옷","바지","치마");

            sub[0][1] = new Array("초침시계","전자시계","방수시계","패션시계");

            sub[0][2] = new Array("롱부츠","샌들","운동화","구두","키높이구두");

            sub[1] = new Array();
            sub[1][0] = new Array("책상","서류철","스템프");

            sub[1][1] = new Array("샤프","연필","필통","지우개");

            function init()
            {
                var nLen = product.length;

                for(var i=0;i<nLen;i++)
                {
                    var idx = document.selPro.product.length;
                    document.selPro.product.length += 1;  // select의 길이를 하나 늘려서 하나 추가할 수 있게
                    document.selPro.product.options[idx].text = product[i];
                    document.selPro.product.options[idx].value = i;
                }
            }

            function selProduct(idx)
            {
                document.selPro.category.length =0;
                document.selPro.category.length += 1;
                document.selPro.category.options[0].text = "세부상품을 선택하세요.";

                document.selPro.sub.length =0;
                document.selPro.sub.length += 1;
                document.selPro.sub.options[0].text = "상품상세를 선택하세요.";

                for(var i=0;i<category[idx].length;i++)
                {
                    var nLen = document.selPro.category.length;
                    document.selPro.category.length += 1;
                    document.selPro.category.options[nLen].text = category[idx][i];
                    document.selPro.category.options[nLen].vale = i;
                }    
            }

            function selCategory(idx)
            {
                var productIdx = document.selPro.product.selectedIndex-1;
                document.selPro.sub.length = 0;
                document.selPro.sub.length += 1;
                document.selPro.sub.options[0].text = "상품상세를 선택하세요.";

                for(var i=0;i<sub[productIdx][idx].length;i++)
                {
                    var nLen = document.selPro.sub.length;
                    document.selPro.sub.length += 1;
                    document.selPro.sub.options[nLen].text = sub[productIdx][idx][i];
                    document.selPro.sub.options[nLen].value = i;
                }
            }
        //-->
        </SCRIPT>
    </HEAD>

    <BODY onLoad="init();">  <!-- onLoad는 밑의 HTML이 전부 로드된 후에 실행된다. -->
    <form name="selPro" method="post" action="">
        <table>
        <tr>
            <td>
                <select name="product" onChange="selProduct(this.form.product.selectedIndex-1);">
                    <option>상품분류를 선택하세요.</option>
                </select>
            </td>
            <td>
                <select name="category" onChange="selCategory(this.form.category.selectedIndex-1);">
                    <option>세부상품을 선택하세요.</option>
                </select>
            </td>
            <td>
                <select name="sub">
                    <option>상품상세를 선택하세요.</option>
                </select>
            </td>
            </tr>
        </table>
    </form>
    </BODY>
    </HTML>



    ★ 게시판에서 글 안보였다 보였다 하는 것과, 글 내용 미리 보여주기


    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
        <HEAD>
        <TITLE> New Document </TITLE>
        <script>
        function m_view()
        {   
            if (document.getElementById("m_list").style.display != "none" )
            {
                document.getElementById("m_list").style.display = "none";  
                document.getElementById("btn_show").src = "btn_03.gif";
            }
            else
            {
                document.getElementById("m_list").style.display = "block";
                document.getElementById("btn_show").src = "btn_op01.gif";
            }
        }

        function m_preview(view)
        {
            document.getElementById("test").style.display = (view)? "block":"none";
            document.getElementById("test").style.left = window.event.x;
            document.getElementById("test").style.top = window.event.y;
            document.getElementById("test").style.width = 300;
            document.getElementById("test").style.height = 200;

            this.T_PADDING=5;
            this.T_DELAY=0;
            this.T_BORDERWIDTH=1;
            this.T_FONTFACE='돋움';
            this.T_FONTSIZE='9pt';
            this.T_FONTCOLOR='#4C4C4C';
            this.T_BORDERCOLOR='#C1C1C1';
            return escape('얼굴은 옥동녀급인데 생긴거답게 놀아라. 하이킥 날아가기전에 아갈싸물길바래.')
        }
        </script>
    </HEAD>

    <BODY>

    <a href="javascript:m_view();"><img id="btn_show" src="btn_03.gif" border="0"></a>

    <div id="m_list" style="display:none">   

        <table width="100%" cellspacing="0" cellpadding="0" border="1">
            <tr align=center bgcolor=#ffffff>     
                <td align=left><img src='4690.gif' border=0 width='19' height='19'>&nbsp;<a href="" style="cursor:hand">nambifucker</a></td>
                <td align=left ><a href="" onMouseMove="m_preview(1);" onMouseout="m_preview(0);">게시판 보기 옵션 예제</a></td>
                <td>0</td>
                <td>0</td>
                <td>09/01 20:46</td>
            </tr>
            <tr align=center bgcolor=#ffffff>     
                <td align=left><img src='4690.gif' border=0 width='19' height='19'>&nbsp;<a href="" style="cursor:hand">nambifucker</a></td>
                <td align=left >
                <a href="" onmouseover="this.T_BGCOLOR='#FEFCE1';this.T_PADDING=5;this.T_DELAY=0;this.T_BORDERWIDTH=1;this.T_FONTFACE='돋움';this.T_FONTSIZE='9pt';this.T_FONTCOLOR='#4C4C4C';this.T_BORDERCOLOR='#C1C1C1';return escape('연습용 레이어입니다.')">testssss</a></td>
                <td>0</td>
                <td>0</td>
                <td>09/01 20:46</td>
            </tr>
        </table>

    </div>

    <div id="test" style="position:absolute;display:none;background-color:#FEFCE1">
        <table border="0" width="100%" height="100%">
            <tr>
                <td><font color="red">연습용 레이어입니다.</font></td>
            </tr>
        </table>
    </div>

    <script src="wz_tooltip.js"></script>
    </BODY>
    </HTML>

    01 로그인....

    프로그래밍/Web 2007. 11. 28. 09:06 Posted by galad

    ★ 이벤트 발생 시 처리할 때 return 값을 true로 주면 기본적인 처리를 마저 하고,

     false로 주면 하지 않는다.


    ex) onSubmit="checkIDandPW(); return false"

    submit 시 checkIDandPW() 함수를 실행 시키고 나서, 기본적인 처리 - 여기서는 submit - 를 하지 않는다.



    <!--
    /******************************************************************************
    *   파일      : login.html
    *   용도      : login 창 체크하는 자바 스크립트 예제
    *   작성자   : 성홍제
    *   작성일   : 2006. 08. 31
    *   Version : 1.0
    ******************************************************************************/
     -->
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
        <title>로그인</title>
        <script type="text/javascript">
        <!--
        function checkIDandPW()
        {

            // var f = document.loginForm;

            // 이렇게 한번만 선언하고, 밑의 document.loginForm를 f라고 써도 된다.


            // form에 이름을 주지 않았을 경우에는 - 서버에서 동적으로 폼을 생성하는 경우에 쓴다

            // var f = document.forms[0];  // 0 번째 폼

            // var f = document.forms["loginForm"];  // 이름이 loginForm인 폼


            // ID체크
            if(document.loginForm.id.value == "")
            {
                alert("ID를 입력해주세요");
                document.loginForm.id.focus();
                return false;
            }
           
            // PW 체크
            if(document.loginForm.pw.value == "")
            {
                alert("PW를 입력해주세요");
                document.loginForm.pw.focus();
                return false;

            }
           
            alert("OK");
            return true;
        }
        //-->
        </script>
    </head>
    <body>
    <form method="post" name="loginForm" action="" onSubmit="return checkIDandPW();" autocomplete="off">
        ID: <input type="text" name="id"><br>
        PW: <input type="text" name="pw"><br>
        <input type="submit" value="전송">
        <input type="reset" value="취소">
    </form>
    </body>
    </html>


    onSubmit 에서 checkIDandPW()의 리턴값을 리턴한다.

    즉, 체크에 성공하면 true, 실패하면 false를 리턴하므로

    성공시에는 기본처리인 submit을 하고, 실패하면 하지 않는다.