const TAXRATE = .925; 
 상수와 변수를 생성하는 데 있어 가장 큰 차이점은 var 대신 const 키워드를 사용하는 것이다. 상수명은 변수와 쉽게 구별하기 위해 통상적으로 모두 대문자를 사용한다.


출처:  자바스크립트에서의 상수 선언


출처: http://iamnotokay.tistory.com/26



if(!new RegExp("^-[0-9]+","g").test(tx_power_val)){

alert("신호세기(power)는 음수 값만 입력 가능합니다.");

$('#TX_POWER').val("")

return;

}


1. 만들기
1)
var re=/패턴/플래그;


2)
var re=new RegExp("패턴","플래그");


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 유니코드
 
 

복잡한 사용방법이 있고 여러 특수문자와의 조합으로 배우기가 쉽지 않아 간단한 예제를 통해 설명한다.

1. 각 문자와 숫자는 해당 문자 또는 문자열이 테스트할 문자열에 있을경우 true 가된다.

<script>
// 'a' 가 있는 문자열 모두가 TRUE (대소문자 구분)
var filter = /a/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); } 
</script>


<script>
// "about" 가 있는 문자열 모두가 TRUE (대소문자 구분)
var filter = /about/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>


2. 대소문자 구분없이 해당 문자 또는 문자열을 검색할 경우 끝에 i 를 붙인다.

<script>
// 'a' 또는 'A' 가 있는 문자열 모두가 TRUE (대소문자 구분 안함)
var filter = /a/i
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>


3. 여러개의 이어지는 내용들을 검색할 경우는 '-' 를 넣어 표현한다.

<script>
// 'a' 에서 'z' 까지중 하나만 있으면 모두가 TRUE (대소문자 구분)
var filter = /[a-z]/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>



4. 여러가지의 문자 또는 문자열을 검색할 경우 '|' 를 넣는다.

<script>
// 'a' 또는 'b' 또는 'c' 가 있는 문자열 모두가 TRUE (대소문자 구분)
var filter = /a|b|c/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>


<script>
// 'a' 에서 'z' 까지 또는 '0' 에서 '9' 까지중 하나만 있으면 모두가 TRUE (대소문자 구분)
var filter = /[a-z]|[0-9]/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>



5. 해당 문자또는 문자열이 없는 경우를 검색할 경우 브래킷('[', ']') 안에 '^' 를 넣는다.

<script>
// 'a' 에서 'z' 까지의 문자가 아닌 문자가 있을 경우 TRUE (대소문자 구분)
var filter = /[^a-z]/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>


6. 문자열의 첫번째 글자가 일치해야할 경우는 '^' 를 브래킷('[', ']') 밖에 넣는다.

<script>
// 'a' 에서 'z' 까지의 문자로 시작하는 문자열일 겨우 TRUE (대소문자 구분)
var filter = /^[a-z]/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>



7. 문자열의 끝쪽 글자가 해당 문자 또는 문자열과 일치해야할 경우는 '$' 를 넣는다.

<script>
// 'a' 에서 'z' 까지의 문자로 끝나는 문자열일 겨우 TRUE (대소문자 구분)
var filter = /[a-z]$/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>



8. 특수문자('\', '^', '$', '*', '+', '?', '.', '(', ')', '|', '{', '}', '[', ']')를 검색할 경우는 '\' 를 넣는다.

<script>
// '\' 가 있는 문자열일 겨우 TRUE (대소문자 구분)
var filter = /\\/
if (filter.test("some test words") == true) { alert("ok"); } else { alert("fail"); }
</script>
크리에이티브 커먼즈 라이선스
Creative Commons License


기타 출처: http://www.shop-wiz.com/board/main/view/root/javascript2/16


/*1번째 인자 : yyyy, m, d   (더하는 기준)

2번째 인자 : 더하는 날짜

3번재 인자 : 기준 날짜

4번째 인자 : 날짜 구분값*/

function addDate(pInterval, pAddVal, pYyyymmdd, pDelimiter){

var yyyy;

var mm;

var dd;

var cDate;

var oDate;

var cYear, cMonth, cDay;

 

if( pDelimiter != "" ){

  pYyyymmdd = pYyyymmdd.replace(eval("/\\" + pDelimiter + "/g"), "");

}//end if

 

yyyy = pYyyymmdd.substr(0, 4);

mm  = pYyyymmdd.substr(4, 2);

dd  = pYyyymmdd.substr(6, 2);

 

if( pInterval == "yyyy" ){

  yyyy = (yyyy * 1) + (pAddVal * 1); 

}else if( pInterval == "m" ) {

  mm  = (mm * 1) + (pAddVal * 1);

}else if( pInterval == "d" ){

  dd  = (dd * 1) + (pAddVal * 1);

}//end if

 

cDate = new Date(yyyy, mm - 1, dd) // 12월, 31일을 초과하는 입력값에 대해 자동으로 계산된 날짜가 만들어짐.

cYear = cDate.getFullYear();

cMonth = cDate.getMonth() + 1;

cDay = cDate.getDate() - 1;

 

// 한자리일 경우 "0" 붙이기

   if( (cMonth + "").length < 2 ){

    cMonth = "0" + cMonth;

   }//end if

   

   if( (cDay + "").length < 2 ){

    cDay = "0" + cDay;

   }//end if

   

if( pDelimiter != "" ){

  return cYear + pDelimiter + cMonth + pDelimiter + cDay;

}else{

  return cYear + "" + cMonth + "" + cDay;

}//end if

 

}


출처: 박형태님 ㅋㅋㅋ

스크롤 가능한 그리드 설정. extJs

http://docs.sencha.com/extjs/4.1.3/#!/api/Ext.AbstractComponent-property-draggable

ExtJs.Grid.Panel

Properties

Defined By

Instance properties


Ext.AbstractComponent

draggable : Boolean READONLY

Indicates whether or not the component can be dragged.


Defaults to: false


Available since: 4.0.0


==========================================================================================


http://try.sencha.com/extjs/4.1.1/community/extjs4-grid-multiline-row/

ExtJS 4 Example: Multiline Row in a Grid


출처:http://blog.naver.com/jjoommnn/130125787219
Javascript의 prototype 제대로 이해하기  Javascript 

2011/12/07 10:55

복사http://blog.naver.com/jjoommnn/130125787219

전용뷰어 보기

Ajax가 대중화 된 이후부터 javascript를 프로그래밍 언어로서 제대로 배우려는 노력들이 많아진것 같다.

그렇게 javascrpt를 공부하다가 보면 객체지향적으로 javascript를 사용하는 방법과 관련하여 prototype을 배우게 된다.

 

그럼 지금 알고 있는 javascript의 prototype에 관련된 지식으로 다음 코드를 보자.

var obj = {};

obj.prototype.foo = function() { alert('foo'); };

 

obj.foo(); //<-에러

위를 javascript 코드를 실행해 보면 에러가 발생한다. 즉 foo라는 함수를 찾을 수 없다는 에러다.

어, 이상하다. 객체의 속성을 엑세스 했을때, 그 객체의 자체 속성에서 못찾으면 그 객체의 prototype에서 찾는것 아니었나?

 

그래, 맞다. 그 객체의 속성을 찾을때 자신의 prototype이 아니라, new를 통해 생성한 base 객체의 prototype에서 찾기 때문에 그렇구나.

그런데 다음 코드를 또 보자.

function base() 

{

    ...

}

 

var obj = new base();

 

base.prototype = { foo : function() { alert('foo'); } };  //base.prototype.foo = function() { ... }  와 다름

 

obj.foo(); //<-에러

이번에도 obj에서 foo를 찾을 수 없다는 에러가 발생한다.

obj는 base를 기반으로 만들어 졌으니, base의 prototype을 나중에 바꾸어도 obj가 쓸 수 있어야 되는거 아닌가?

 

그러나 주석에도 썼지만 base.prototype.foo = function() { ... } 헝태로 코드가 작성되었다면 에러가 발생하지 않는다.

또한 base.prototype = { ... } 을 먼저 실행하고 var obj = new base()를 하게 되면, 역시 에러가 발생하지 않는다.

 

나참, 이거 나름대로 공부한다고 했는데 클래스를 가진 언어만 알고 있는 상태에서 이 prototype을 익히는 것이 만만치가 않다.

하지만 이렇게 prototype과 관련하여 아리송한 문제들이 생기는 이유는 뭔가 보이지 않은 것이 있었기 때문이었다.

 

결론부터 이야기 하면 다음과 같다.

javascript의 객체에는 프로토타입과 관련하여 위의 그림 처럼 2개의 연결고리를 가지고 있다.

 

prototype은 익히 알고 있던 그 속성이다. 프로그램적으로 세팅하고 바꾸고 할 수 있는 바로 그 prototype 이다.

반면 __proto__는 내부에 있기는 하지만 내부적만 사용되며 프로그램적으로 접근할 수 없는 속성이다.

이 두 속성의 차이는, __proto__는 물려받은 상위의 프로토타입 객체와 연결되는 고리이며, prototype은 하위에 물려줄 프로토타입 객체에 대한 연결고리라는 것이다.

이 두 속성은 밀접하게 연관되어 있는데, 물려받으려면 물려주는 누군가가 있어야 하기 때문이다.

 

prototype 속성에 관해서는 여느 책이나 자료에서 많이 보아왔던 것이며, 앞서도 이야기 했지만 프로그램적으로 자유롭게 세팅하거나 교체할 수 있다.

그러나 __proto__는 프로그램적으로 접근할 수 없으며, 단지 new 연산자에 의한 객체 생성과정 중에만 세팅된다.

 

다음과 같은 코드는

 

var obj = new base();

새로운 객체를 생성하고 그 새로 생성된 객체의 __proto__속성에다가, base의 prototype 속성에 연결되어 있던 객체를 연결시켜주는 것이다.

 

여기서 'base의 prototype 객체'라고 이름을 붙였지만, 이것 역시 그냥 object인 객체다. 특별한 타입의 뭔가가 아니다.

base의 prototype에 연결되어 있던 객체가 new 연산자를 통해서 새롭게 생성된 객체의 __proto__에 연결되는 것이다.

 

이 __proto__에 의한 연결고리는 특히나 중요한데, 바로 객체의 속성 검색시에 검색 체인을 형성하기 때문이다.

즉 어떤 객체의 속성을 엑세스 할 때, 그 객체의 내부에서 찾아보고 없으면 __proto__를 따라 상위 객체로 가면서 검색을 하게 된다.

 

그러나 이 검색 과정중에 prototype 속성에 의한 연결고리로는 검색이 이루어지지 않는다는 것을 알아야 한다.

위의 첫번째 예제에서 에러가 발생하는 이유가 바로 이 때문이었다.

 

이 __proto__에 의해 연결된 개체를 따라가면서 이루어 지는 검색은 최상의 Object까지  이루어진다.

최상위 Object까지 해서 전체적인 그림을 살펴보면 다음과 같이 된다.

        [위 그림은 잘못된 그림이므로 수정된 글을 참조하기 바람]

 

그러면 위의 2번째 예제에서 에러가 발생한 이유는 무엇인지도 대충 감이 올것 같은데, 그림으로 그려보면 다음과 같은 상황이 되었기 때문이다.

 

즉 new base()를 할 당시에는 obj의 __proto__와 base의 prototype이 같은 객체를 가리키고 있었지만, base의 prototype을 완전히 교체해 버린 상태가 된 것이다. 그러니 base.prototype에 추가된 속성이 obj를 통해 엑세스 될 수 없는 것이다.

base.prototype을 완전히 다른 객체로 바꾸는 것이 아니라, 주석처리 했던 것 처럼 추가되는 형태였다면 에러는 발생하지 않는 것이다.

 

이렇게 놓고 보니 obj객체와 base객체간의 관계는 전혀 무관한 관계가 되었다.

따라서 다음과 같은 결과가 나온다.

function base() 

{

    ...

}

 

var obj = new base();

 

base.prototype = { ... };

 

alert( obj instanceof base );  //<-- false를 출력 

 

즉 javascript에서 객체들간의 관계는 prototype에 의해서 묶이는 것이다.

 

그럼 javascript에서 상속을 구현하기 위한 코드가 어떻게 연결되는지 따져보자.

javascript에서 상속은 다음과 같은 형태로 구현된다.

function base()

{

    //base 생성자에서 속성 추가

    ...

}

 

//base의 prototype에 속성추가

base.prototype.foo = ...

...

 

function sub()

{

    //sub 생성자에서 속성 추가

    ...

}

 

//sub의 prototype에 new base() 로 생성한 객체대입

sub.prototype = new base();

 

//생성자 함수를 sub로 바꿈

sub.prototype.constructor = sub;

 

//sub 객체 생성

var obj = new sub();

위의 코드에 따른 객체의 상태를 그림으로 살펴보면 다음과 같이 된다.

화살표가 조금 어지럽게 연결되긴 했지만, 크게 어렵지 않게 그림을 이해 할 수 있을 것이다.

 

위의 그림에 따라 obj의 속성을 엑세스 할때 검색 경로를 따져보자. 상속의 개념이 적용되는지 말이다. 검색은 __proto__를 따라서 올라가기만 하면된다.

 

(1)일단 obj 내부의 속성에서 찾을 텐데, 이 obj 내부 속성은 sub의 생성자에서 추가한 속성들일 것이다.

(2)sub 생성자에서 추가한 속성이 없으면 base의 생성자에서 추가한 속성에서 찾게 될 것이다.

(3)그래도 없으면 base의 prototype 객체에서 찾게 될 것이다.

(4)그래도 없으면 Object의 prototype에서 찾게 될 것이다.

 

자연스럽게 자식에게서 상위 부모로 검색경로가 진행되는 것을 알 수 있다.

 

[참고문헌]

자바스크립트 성능 최적화, 니콜라스 자카스 저/한선용 역 | 한빛미디어, 2011년 9월

 


특수 문자도 \ 태그를 붙여서 사용할 수 있는듯.. 
\. 으로 쓰면 . 도 인식할 수 있음.

JavaScript RegExp [^0-9] Expression

RegExp Object Reference JavaScript RegExp Object

Example

Do a global search for the numbers that are NOT 1 to 4 in a string:

var str = "123456789";
var patt1 = /[^1-4]/g;

The marked text below shows where the expression gets a match:

123456789

Try it yourself »

Definition and Usage

The [^0-9] expression is used to find any digit NOT between the brackets.

The digits inside the brackets can be any numbers or span of numbers from 0 to 9.

Tip: Use the [0-9] expression to find any digit between the brackets.


Browser Support

Internet Explorer Firefox Opera Google Chrome Safari

The [^0-9] expression is supported in all major browsers.


Syntax

new RegExp("[^0-9]")

or simply:

/[^0-9]/

Syntax with modifiers

new RegExp("[^0-9]","g")

or simply:

/\[^0-9]/g



More Examples

Example

Do a global search for numbers that are NOT "1" in a string:

var str = "12121212";
var patt1 = /[^1]/g;

The marked text below shows where the expression gets a match:

12121212

Try it yourself »



RegExp Object Reference JavaScript RegExp Object


출처: http://darkhorizon.tistory.com/240
<body>
     <input type="checkbox" id="mod_gb1" name="mod_gb" value="1" class="border-none" /> 이용 <br />
     <input type="checkbox" id="mod_gb2" name="mod_gb" value="2" class="border-none" />  변경 <br />
     <input type="checkbox" id="mod_gb3" name="mod_gb" value="3" class="border-none" />  해지

     <input type="button" id="btn" />
</body>

1. 특정 체크박스 체크 확인


<script>
      $('#mod_gb2').click(function() {
       var ischecked = $('#mod_gb2').attr('checked');
       
       if(ischecked){
           alert("2번이 체크되었습니다.");
       }else{
           alert("2번이 체크되지 않았습니다.");
       }
      });
</script>


2. 체크 박스 전체

$('input[name=mod_gb]:checkbox').click(function() { // name이 mod_gb인 체크박스 그룹의 아무 박스를 선택하면
       var gb1 = $('#mod_gb1').attr('checked');
       var gb2 = $('#mod_gb2').attr('checked');
       var gb3 = $('#mod_gb3').attr('checked');
       if(gb3 && (gb1 || gb2)){
            alert("ID 해지는 다른 항목과 중복 선택하실 수 없습니다.");
            $('#mod_gb3').attr('checked', false);
       }
});

3. 체크박스 선택 유무 확인

$('#btn').click(function(){
    var cnt = $("input[name=mod_gb]:checkbox:checked").length;
    if(cnt < 1){
         alert('한 개 이상을 선택하셔야 합니다');
    }else{
         alert(cnt+'개가 선택되었습니다');
    }
});

4. 체크박스 숫자 확인

  $('#all').click(function() {
      var checkboxCnt = $("input:checkbox").length; // 체크박스 전체 갯수
      var checkYn = $('#all').attr('checked');
      if(checkYn){
          $('input:checkbox').attr('checked',true);
          $('input:checkbox').attr('disabled',true);
          $('#all').attr('disabled',false);
      }else{
          $('input:checkbox').attr('checked',false);
          $('input:checkbox').attr('disabled',false);
      } 
  }); 


+ Recent posts