2015년 9월 29일 화요일

[JavaScript] 브라우져 객체 모델(BOM, Browser Object Model) - history 객체

history 객체는 현재 웹페이지를 표시하는 브라우져 윈도우의 방문기록을 저장하는 객체이다. history 객체는 window 객체의 프로퍼티 중 하나이기 때문에 다른 윈도우의 방문기록에는 접근하지 못한다. 또한 보안상의 이유로 history 객체에 저장된 url들에도 접근이 불가능하기 때문에, 오직 웹페이지 이동만이 가능하다.

history 객체는 length 프로퍼티를 가지는데 length 값은 history 스택의 길이이다. 즉 history.length 가 0이라면 이는 history 스택이 empty 상태란것을 말하게 된다.

history 객체의 go 메소드를 이용해 방문기록으로 이동이 가능하다.
go 메소드는 1개의 argument 를 받는다. 해당 argument 는 숫자 또는 문자열이 될 수 있으며 argument 의 타입에 따라 다른 결과를 낳는다.


//숫자를 argument로 전달할시
history.go(-1)//바로 전 페이지로 이동
history.go(-2)//전전 페이지로 이동
history.go(0)//현재페이지를 리로딩
history.go(1)//앞페이지로 이동

//문자(url)을 argument로 전달할시
history.go("google.com")//가장 최근의 google.com 페이지로 이동한다
history.go("naver.com")//가장 최근의 naver.com 페이지로 이동한다

go 메소드처럼 forward, back 메소드를 이용, 앞페이지, 전페이지로 이동이 가능하다.


history.back();
history.forward();

[JavaScript] 브라우져 객체 모델(BOM, Browser Object Model) - location 객체

브라우져 객체 모델을 구성하는 객체중 하나인 location 객체, location 객체는 현재 윈도우에 로드된 웹문서에 대한 정보를 제공한다. location 객체는 window.location, 또는 document.location으로 접근 가능하다. location 객체는 JavaScript 에서 유일무희하게 현재 웹페이지의 url에 접근 가능한 객체이다. location 객체의 property 들은 아래와 같다.

Property설명예) "http://muckycode.blogspot.kr/2015/05/javascript-prototype.html#tableContent" 기준
hashurl hash, # 문자가 없을경우에는 """#tableContent"
hostserver 이름과 port"muckycode.blogspot.kr"
hostnameserver 이름"muckycode.blogspot.kr"
href전체 url"http://muckycode.blogspot.kr/2015/05/javascript-prototype.html#tableContent"
pathname현재 url의 directory "/2015/05/javascript-prototype.html"
portport 넘버""
protocol프로토콜http:
search현재 url의 query string, ?로 시작하는 문자열""

location 객체를 이용해 url 조작하기

브라우져의 현재 위치는 다양한 방법에 의해 조작될 수 있다. 가장 쉬운 방법으로는 location객체의 assign 메소드를 이용하는것이다.


location.assign("http://google.com");
위 코드는 현재 페이지를 http://google.com 으로 리디렉트 한다.

또 다른 방법으로는 location.href 프로퍼티나 location 객체에 새로운 String 값을 어싸인 하는 법이 있다.


window.location = "http://google.com";
location.href = "http://google.com";

웹페이지 새로고침

location.reload 메소드를 이용하면 웹페이지를 리로딩 할 수 있다. reload 메소드는 별다른 argument를 필요로 하지 않으나, 경우에 따라 true 값을 전달하지 않을 시에 브라우져 캐시를 이용하여 페이지를 다시 로딩할 수도 있다.
만약 true 값을 argument로 전달한다면, 해당 웹페이지는 서버를 통해 reload 된다.


location.reload();//브라우져에 따라 cache를 통해 reload 할 수도 있다.
location.reload(true);//sever에 다시 연결새 reload 한다. 

2015년 9월 24일 목요일

[JavaScript] 브라우져 객체 모델(BOM, Browser Object Model) - window 객체

Browser Object Model, BOM은 ECMAScript, DOM(Document Object Model)와 함께 JavaScript를 구성하는 3가지 요소 중 하나이다. BOM은 웹페이지의 컨텐츠에 관계없이 브
라우져에 대한 정보를 제공해주는 객체이다.

window 객체와 global 스코프


이런 BOM의 중심에는 window 객체가 함께하고 있는데, 이 window 객체는 브라우져 윈도우의 정보를 저장함과 동시에 ECMAScript의 Global 객체의 역할을 수행하기도 한다. 즉, 우리가 작성하는 스크립트 내에서 선언되는 모든 객체, 변수, 함수들이 global 객체window 객체 내의 프로퍼티(property)로써 선언된다는 뜻이며, window 객체가 global scope의 역할을 수행한다는 말이다.

아래 코드를 보자.


var t = "test";

function printT(){
console.log(t); //test
}

printT();

console.log(window.t); //test
window.printT(); //test

console.log(delete window.t); //false
console.log(delete window.printT); //false 

window.g = "window";

console.log(g); //window
console.log(delete window.g); //true
console.log(window.g); //undefine
console.log(g); //error

선언된 변수 twindow 객체를 이용해 접근이 가능하기도, window 객체를 통하지 않고도 접근이 가능하다. 선언된 함수 printT 또한 window 객체를 이용해 접근이 가능하다.
이렇게 글로벌 스코프에서 선언된 함수들과 변수들이 window 객체의 프로퍼티가 되지만, 실제 window 객체의 프로퍼티로써 선언된 변수와 함수들과는 작은 차이를 가진다.

바로 delete 키워드를 이용해 객체의 프로퍼티를 삭제할 때의 경우인데, 이 경우에는 window 객체를 통해서 선언되지 않은 함수들과 변수들은 삭제가 불가능하다.
위의 코드에서 window 객체를 통하지 않고 선언된 변수 t 와 함수 printT의 경우에는 delete 키워드를 이용해 프로퍼티 삭제를 시도할 경우에 false 값을 반환하게 된다. 하지만 window 객체를 통해 선언된 프로퍼티 g 같은 경우에는 delete 키워드를 이용해 삭제를 시도할시 true 값을 반환하며 성공적으로 프로퍼티를 삭제하게 된다. 이는 var 키워드를 이용해 선언된 변수들의 configurable attribute(Property Attribute 중 하나, 참조글)가 false로 세팅되기 때문이다.


window 객체와 BOM(Browser Object Model)


HTML frame

웹페이지에 존재한는 모든 frame 태그들은 window.frames 프로퍼티를 통해 접근이 가능하다. window.frame 프로퍼티는 콜랙션 프로퍼티로 frame 태그들은 html 코드에 적힌 순서대로 frame 프로퍼티에 저장된다(window.frame[index], index는 0부터 시작한다).

window 객체와는 별개로 최상위 frame(Browser Window)를 참조하는 top 객체 또한 존재하는데, top 객체의 frames 프로퍼티를 이용해 하위 프레임에 접근하는 것도 가능하다.


<html>
    <head>
        <title></title>
    </head>
    <frame name="fr1" src="frame01.html"></frame>
    <frame name="fr2" src="frame02.html"></frame>
    <frame name="fr3" src="frame03.html"></frame>
    <body>
        <script type="text/javascript">
        var fr1 = window.frames[0];
        var fr2 = window.frames[1];
        var fr3 = top.frames[3];
        </script>
    </body>
</html>

Position

window 객체는 screenX 프로퍼티와 screenY 프로퍼티를 통해 현재 웹브라우저 윈도우의 위치를 제공한다.


window.screenX
window.screenY
//각각의 프로퍼티는 브라우져 최상단 좌측 픽셀의 위치를 알려준다.

Size

window 객체의 outherWidth, outherHeight, innerWidth, innerHeight 프로퍼티를 통해 브라우져 윈도우의 너비,높이와, 웹페이지가 표시되는 top frame의 너비,높이에 접근할 수 있다.


window.outerHeight
//1040
window.outerWidth
//1920
window.innerHeight
//955
window.innerWidth
//1153

Pop Up Window, 팝업 윈도우

window.open 메소드는 사용자가 새로운 팝업 윈도우를 열거나 특정 윈도우를 원하는 URL로 향할수있게 만들어준다.


window.open("http://google.com", "_blank");
//위의 코드는 아래의 html 코드와 같은 기능을 한다. 
<a href = "http://google.com" target = "_blank">

window.open 메소드는 3개의 String 아규먼트를 받는다. 3개의 argument 들은 모두 optional argument 이니, 이 argument들 없이도 window.open 메소드를 호출하는게 가능하다.
  1. 새로 오픈할 윈도우의 url
  2. 타겟 윈도우 프레임의 name 속성
    • _blank : 새로운 윈도우
    • _self : 현재 코드가 실행된 프레임
    • _top : 현재 코드가 실행된 프레임의 최상위 프레임
    • _parent : 현재 코드가 실행된 프레임 의 parent 프레임
    • 원하는 윈도우 프레임 이름 : 만약 해당 name 아트리뷰트를 가진 프레임이 존재하지 않을 경우에 _blank와 같이 새로운 윈도우가 실행되며, 실행된 윈도우 프레임의 name attribute 가 전달된 윈도우 프레임 이름으로 설정된다.
  3. full screen, height, width 등 각종 설정 옵션들을 모아 놓은 specification string, 설정 가능한 스펙들은 아래와 같다. 

설정 이름
height숫자새 윈도우의 height 값, 최소값은 100
width숫자새 윈도우의 width 값, 최소값은 100
location"yes" 또는 "no"location 바가 표시되어야 하는지, 기본값은 no
menubar"yes" 또는 "no"menu 바가 표시되어야 하는지, 기본값은 no
resizable"yes" 또는 "no"사이즈 조절이 가능한지, 기본값은 no
scrollbars"yes" 또는 "no"스크롤링이 가능한지, 기본값은 no
status"yes" 또는 "no"status 바가 표시되어야 하는지, 기본값은 no
toolbar"yes" 또는 "no"툴바가 표시되어야하는지, 기본값은 no
left숫자윈도우의 (0,0) 픽셀의 위치 x값, 최소값은 0
top숫자윈도우의 (0,0) 픽셀의 위치 y값, 최소값은 0

height 500, width 500 사이즈 윈도우를 화면의 (50,50)위치에서 열기위해서는

"height=500,width=500,top=50,left=50" 문자열을 3번째 argument로 전달해주면 된다.

System Dialog

alert, confirm, prompt 메소드를 이용해 알림창, 확인창, 입력창을 띄울 수 있다.

window.alert()

alert() 메소드는 알림창을 띄울때 사용된다.


window.alert("알림창입니다.")

alert 창

위의 코드는 이와 같은 창을 띄우게 된다.

window.confirm()

confirm 메소드는 확인창을 띄울때 사용한다.


var s = window.confirm("confirm 창입니다.")

confirm 창

confirm 메소드는 위와같이 확인창을 띄우며 user가 ok버튼을 누를시 true 값을 cancel 버튼을 누를시 false값을 리턴한다.

window.prompt()

prompt 메소드는 user로부터 문자열을 받아올 때 사용한다.


var s = window.prompt("prompt 창입니다.")

prompt 창

prompt 메소드를 호출할시 위와같은 창을 띄우게 되며, 사용자가 ok 버튼을 누를시에 입력된 문자열을, cancel 버튼을 누를시에 null 값을 리턴한다.

2015년 5월 17일 일요일

[JavaScript] Closure(클로져)

Closure(클로져) 란 무엇인가?


자바스크립트에서 클로져란(Closure) 다른 함수의 스코프(Scope)내에 있는 변수들에 접근할 수 있는 함수를 뜻한다. 아래 코드를 보자.


function closureExample(exVar){
  return function(){
    return exVar;
  };
}

var foo = closureExample("foo");
var bar = closureExample("bar");

console.log(foo());
console.log(bar());

closureExample이라는 함수는 매개변수로 exVar를 받으며, 내부에서 anonymous function(익명 함수, 람다 함수)을 선언 후 반환한다. 반환되는 함수 closureExample함수의 스코프에서 선언되었기 때문에 closureExample함수의 매개변수로 주어진 exVar이라는 변수에 접근할 수 있다. 그리고 반환된 익명 함수는 function expression 방식으로 foobar라는 변수에 어싸인되게 된다.

그렇게 foo와 bar 함수를 실행하면, closureExample함수로 전달한 매개변수에 접근하는 함수가 반환된게 된다.

이게 가능한 이유는 자바스크립트의 Execution Context가 다른 Execution Context에 의해 참조되는 한 파기되지 않기 때문이다. Execution Context 와 스코프에 대해 자세한 글을 읽어볼려면 여기를 클릭하자

조금 더 정확히 말하자면, 반환되는 익명함수는 호출된 closureExample함수내에서 선언되었기 때문에 closureExample함수의 Execution Contextvariable environment 객체를 참조하고 있는데, 자바스크립트의 가비지 콜랙터(Garbage Collector)는, 객체가 다른 인스턴스에 의해 참조되고 있는 동안은 해당 객체를 사용 중으로 판단하여 객체에 할당된 메모리를 수집하지 않는다.

closureExample 함수 내에서 선언된 익명함수 객체가 반환되면서 function expression 방식으로 foo라는 변수에 의해 참조되게 되는데, 이렇게 되면서, 해당 익명함수의 variable environment 객체는 사용 중으로 마크되며, 사용 중으로 마크된 익명함수의 execution context가 closureExample 함수의 variable environment 객체를 참조하게 되니, 마찬가지로 closureExample의 variable environment 객체도 사용중으로 마크되게 된다.

이 때문에, closureExmaple함수의 실행이 끝나 정해진값을 반환했음에도 우리는 closureExample이 호출될 때 생성된 variable environment에 계속 접근이 가능하다.



2015년 5월 13일 수요일

[JavaScript] Regular Expression(정규표현식)과 RegExp 객체

정규표현식이란 특정 패턴의 문자열을 의미하며, 이를 통해 이 문자열에서 특정 단어나, 특정 패턴을 가진 문자열을 찾아낼 수 있다.

자바스크립트는 기본 내장(Built-in)객체로 RegExp 객체를 탑재하며, RegExp 객체의 test 또는 exec 메소드를 이용해 정규표현식을 이용한 패턴 매칭이 가능하다.

정규 표현식 패턴(Regular Expression Pattern)생성하기


정규 표현식의 패턴 여러 문자들로 이루어지며 사용자는 원하는 패턴을 두개의 /(Slash)사이에 적게된다. /(Slash)는 delimiter로써 프로그래밍 언어에서 해당 패턴의 시작과 끝을 알린다. 또한 / 뒤에 정규 표현식 검색 옵션을 적을 수도 있다.


var expression = /abc/; //abc문자열을 뜻한다.
var expression = /at/; //at문자열을 뜻한다.

이에 더해서 몇가지 특수문자를 이용해 조금 더 복잡한 패턴 생성이 가능하다.

특수문자의미
일반
\1. 일반 문자 앞에 올 경우에는, \를 포함한 일반문자를 특수문자로 해석한다.
2. 특수 문자 앞에 올 경우에는, Escape Chracter 의 역할을 한다, 즉 /\\/은 일반문자 "\"를 표현하는 표현식이다.
^문자열의 시작과 일치한다.
예) /^E/는 E로 시작하는 모든 문자열과 일치한다.
$문자열의 끝과 일치한다.
예)/E$/는 E로 끝나는 모든 문자열과 일치한다.
** 선행 문자가 0번이상 반복된다. {0,}과 같은 의미를 가진다.
/ab*/는 abbbbb, a, ab, 등과 일치하며, /ab*c/는 abbbbc, ac, abc, 등과 일치한다.
Quantifiers
++ 선행문자가 1번이상 반복된다. {1,}과 같은 의미를 가진다.
/ab+/는 abbbbb, ab 등과 일치하나, a와는 일치하지 않는다.
/ab+c/는 abbbc, abc등과 일치하나 ac와는 일치하지 않는다.
?1. 선행 문자가 0번 또는 1번 존재한다. {0,1}과 같은 의미를 가진다
2. 수량자(Quantifier, *, +, ?,{})의 뒤에 올때는 선행 수량자의 최소값만큼 일치한다.
예) /a{1,4}/ 패턴을 "aaaa"라는 문구에 사용시, "aaaa" 전체와 일치하나,
/a{1,4}?/ 패턴을 사용시에는 제일 앞의 a 한글자에만 일치한다
{n}선행 문자가 양의 정수 n 회만큼 발생한다
{n,m}선행 문자가 최소 n회, 최대 m회만큼 발생한다.
m이 비게되면 무한을 뜻한다, {n,}은 최소 n회이상을 의미
Group Constructors
(x)하위 패턴을 생성하며 \1, \2 와 같이 \숫자 문구를 이용해서 패턴을 재사용 가능하다.
예) 표현식 \([1-9]{3,}?)\-\1\-\1\ 은 \([1-9]{3,}?)\-([1-9]{3,}?)\-([1-9]{3,}?)\와 같다.
표현식 \(foo) (bar) \1 \1 \2\ 은 \(foo) (bar) \(foo) \(foo) \(bar)\와 같다.
(?:x)(x)와 같이 하위패턴을 생성하나, 패턴 재사용이 불가능하다.
x(?=y)x의 뒤에 y가 올때만 x와 일치한다.
x(?!y)x의 뒤에 y가 오지 않을 때만 x와 일치한다.
(x|y)x 또는 y와 일치한다.
Character Set
[xyz]문자 세트를 생성한다. -(hypen)을 이용해서 범위를 정할 수도 있다.
/[abcdefg]/ 는 /[a-g]/와 같으며 a,b,c,d,e,f,g 한 글자와 일치 한다.
[^xyz]문자 세트를 생성한다. 단, 해당 문자가 포함되지 않을 때 일치한다.
/[a-g]/는 a,b,c,d,e,f,g가 아닌 다른 문자 1개와 일치한다.
[x-z][xyz]와 같은 표현
[^x-z][^xyz]와 같은 표현
[x-zX-A]x-z범위 사이, 또는 X-A범위 사이의 모든 문자와 일치한다
Meta Character
[\b]Backspace와 일치한다.
\b와는 다른 의미를 가지니 조심할것.
.모든 문자와 일치한다.
\bWord Boundary(단어간의 경계)를 의미한다,
단어간의 경계는 길이가 0 이므로 \b는 언제나 다른 문자와 함께 사용된다.
예) /\bace/ 는 "acehigh"의 ace와 일치하며 /high\b/는 "acehigh"의 high와 일치한다.
단, /eh\b/나 /\beh/는 "acehigh"와 부분적으로 전혀 일치하지 않으며,
이는 "eh"문구가 단어내부에 포함되어 있기 때문이다
\B\b와는 반대로 non-word boundary를 의미한다,
위의 "acehigh"에서 "/\Beh\B/를 사용했을 때 "eh"와 일치하며,
이는 "eh" 앞뒤로 단어가 이어지기 때문이다.
\cX제어문자와 일치한다.
\d0-9 사이의 숫자와 일치한다.
\D0-9 사이의 숫자와 일차하지 않는 모든 문자와 일치한다.
[^0-9]와 같다.
\fform feed와 일치한다.
\nline feed와 일치한다.
\rcarriage return와 일치한다.
\ttab(탭)과 일치한다.
\vVertical Tab(수직 탭)과 일치한다.
\sspace, form feed, line feed, carriage return, tab등의 공간 문자와 일치한다.
\Sspace, form feed, line feed, carriage return, tab, vertical tab등의
공간 문자를 제외한 모든 문자와 일치한다.
\w"_"(underscore)을 포함한 모든 숫자 + 알파벳 문자와 일치한다.
/[A-Za-z0-9_]/와 같다.
\W\w와 일치하지 않는 모든 문자와 일치한다.
\숫자()로 생성되는 하위패턴을 재사용 가능하다.
\0Null 문자와 일치한다.
\xhh2자리 16진수 코드 hh를 가진 문자와 일치한다.
\uhhhh4자리 16진수 코드 hhhh를 가진 문자와 일치한다.


또한 RegExp 패턴 검색 옵션을 정하는 총 3개의 flag가 있다

g : Global Search, 패턴 검색이 처음 일치하는 스트링에서 멈추는 것이 아니라 전체 텍스트에 적용된다.
i : ignore case, 대소문자 관계없이 검색된다
m: multiline mode, 한 줄이 끝나고 다음 줄까지도 검색이 이어진다다다

RegExp 객체 생성하기

RegExp 객체는 2가지 방법으로 생성이 가능하다.

Regular Expression Literal


var expression = /abc/g;
// "/"는 delimiter며 "/"사이에 패턴이 들어가고 그 후에 flag 표시를 하게된다.
// /abc/g는 전체 텍스트에서 "abc" 문자열을 일치한다.

RegExp Constructor


var rep1 = new RegExp('abc', 'g');
var rep2 = new RegExp(/abc/, 'gmi');
// 첫번째 파라미터로 패턴이 들어가며, 두번째 파라미터로 flag가 들어가게 된다
// 단 첫번째 경우처럼 '(single quote)로 패턴 문자열을 구성할 경우에, \(backslash)는 \\로 표현된다.
// 즉 /\d+/ 라는 패턴은 '\\d+'로 적어야 한다.

각각의 RegExp 객체는 총 6가지 프로퍼티를 가지고 있다.

  • global : 표현식이 g flag를 가졌는지를 가리키는 Boolean 값
  • ignoreCase : 표현식이 i flag를 가졌는지를 가리키는 Boolean 값
  • lastIndex : 다음 매칭이 시작될 문자의 위치를 가리키는 Integer 값, 기본값은 언제나 0이다.
  • multiline : 표현식이 m flag를 가졌는지를 가리키는 Boolean 값
  • source : Regexp에 사용된 정규 표현식, 표현식의 delimiter(/) 내부 패턴


var rep = new RegExp('foo.+', 'gi');

console.log(rep.global); //true
console.log(rep.ignoreCase); //true
console.log(rep.lastIndex); //0
console.log(rep.multiline); //false
console.log(rep.source); //foo.+

Regexp.prototype.exec()


exec()메소드는 파라미터로 주어진 문자열을 검색해 해당 표현식에 일치하는 결과값을 Array 형식으로 반환한다.

Parameter : 검색을 실행할 문자열(String)

Return : 표현식과 일치하는 문자열이 존재할 떄 Array형식으로 결과값을 반환하며, 해당 RegExp 인스턴스의 프로퍼티를 업데이트 한다.
반환되는 Array의 첫번째 인덱스에 해당 표현식과 일치하는 문자열이 저장되며, 그 후로 각각의 인덱스에 표현식에서 생성한 하위패턴['(',')'를 이용하는것]에 일치하는 문자열들이 순차적으로 저장되게 된다
표현식과 일치하는 문자열이 존재하지 않는다면, null 값을 반환한다.


var reg = /(java).*(\d{3}).*(fun)/gi

var str = "My JavaSrcipt101 class is fun. Good Class";

var result = reg.exec(str);
console.log(result);

//  reg.exec(str)메소드 실행 후 반환되는 Array 값
//
//  result[0] : 'JavaSrcipt101 class is fun',
//  result[1] : 'Java',
//  result[2] : '101',
//  result[3] : 'fun',
//  result["index"] : 3,
//  result["input"] : 'My JavaSrcipt101 class is fun. Good Class'

반환되는 Array 객체 정보

배열 인덱스(Array Index)저장되는 값예제
[0]표현식에 일치하는 문자열JavaSrcipt101 class is fun'
[1], [2], [3]....[n] 각각의 하위 패턴에 일치하는 문자열[1] : 'Java'
[2] : '101'
[3] : 'fun'
배열 객체 프로퍼티(Property)저장되는 값예제
"index"검색이 실행된 문자열에서
첫번째로 표현식이 일치하는 문자의 위치(최소 0에서 시작한다)
3
"input"검색이 실행된 문자열My JavaSrcipt101 class is fun.'

위의 형식에 일치하는 배열(Array)이 반환되며 exec() 메소드를 실행한 Regex 인스턴스는 아래와 같이 업데이트 된다.

Regex 인스턴스의 프로퍼티(Property)저장되는 값예제
lastIndex다음 검색을 실행할 문자열의 인덱스
일치하는 문자열의 마지막 문자의 인덱스 + 1이 된다.
만약 g 플래그를 사용하지 않는다면 언제나 0이 된다.
29
"fun" 뒤에오는
마침표 문자 (.) 의 인덱스
ignoreCasei 플래그의 사용여부true
globalg 플래그의 사용여부true
multilinem 플래그의 사용여부false
source검색에 사용한 표현식(java).*(\d{3}).*(fun)

RegExp.prototype.test()


test() 메소드는 파라미터로 주어진 문자열에 표현식에 일치하는 문자열이 존재하는지를 확인한 후 그 결과값을 true 또는 false의 Boolean 값으로 반환한다.

Parameter : 검색을 실행할 문자열(String)

Return : 표현식과 일치하는 문자열이 존재할때는 true 값을 반환하며, 아닐시는 false 값을 반환한다


var reg = /[A-Za-z]/;

var str = "My JavaSrcipt101 class is fun. Good Class";

var resultStr = reg.test(str);

console.log(resultStr); //true

var num = "4132";

var resultNum = reg.test(num);

console.log(resultNum); //false