블로그 이미지
GUCCI

카테고리

전체보기 (111)
여행 (1)
기기 (2)
쇼핑 (0)
게임 (0)
etc. (6)
취업이야기 (0)
업무일지 (5)
리눅스 (38)
웹프로그래밍 (2)
네트워크 (4)
JAVA (17)
Android (0)
IOS (2)
LUA (8)
C/C++ (1)
Objective C (2)
SERVER (2)
그누보드4 (1)
MSSQL (2)
Programming (1)
자바스크립트 (4)
HTML/CSS (1)
LGNAS (0)
Total
Today
Yesterday

Lua 01. 문법

LUA / 2012. 3. 5. 10:30

Lua 기초 문법 중 식별자 (Identifier) 에 대해 알아보겠습니다.
Identifier 한글로 식별자라고 번역하기도 하는 그것은 프로그래밍 언어에서 사용하는

단어들을 의미합니다.
< i, like, playing, video, games > 뭐 이런 거를 말하는데요.

변수/함수/클래스/모듈/키워드 등등의 이름으로
사용할 수 있는 단어들입니다. 물론 사용자는 키워드나 예약된 단어는 사용할 수 없습니다만

모조리 식별자 입니다.


1. 기초 규칙
다른 프로그래밍 언어와 비슷한 규칙으로 되어 있습니다.
1) 문자, 숫자, _ (Underscore) 로 구성
2) 첫 문자는 숫자가 될 수 없음
3) keyword를 포함한 예약된 단어와 중복 불능
4) 대소문자 구별함
5) 내부 전역 변수명 사용 금지


2. 조건 1 - 문자
Lua 에서 식별자로 사용 가능한 문자는 현재 시스템의 locale에서 표현할 수 있는 문자입니다.
locale에 대해 간단히 설명하자면
현재 한글 Windows 를 사용한다면 당연히 Korean 이 기본 locale로 설정되며,
Linux 에서 $LANG 을 en_US 등으로 설명했다면 English 가 되는 것입니다.
그래서 Lua 를 한글 Windows 에서 실행한다면 한글로 변수나 함수 이름을 사용할 수 있습니다.
단, Lua는 플랫폼 독립적이며 다른 언어와의 통신이 되야하고 세계 어디에서도 사용할 수 있는 프로그램을 작성하는데 사용할 것이므로 되도록 locale 의 영향을 받는 한글/일어/중문 등은 사용하지 않는 것이 좋습니다.
강좌에서 모든 예제는 a ~ z, A ~ Z 의 52 개 알파벳 만을 사용합니다.

 

Lua는 대소문자를 구별합니다.
C/C++ 과 마찬가지로 대문자와 소문자는 다른 문자로 인식합니다. 이 또한 locale 에 따릅니다.
locale에 따라 대소문자 규칙이 달라집니다. 따라서 이러한 이유 때문에도 알파벳만을 사용하는 것을 권장합니다.
아래 단어는 모두 다른 식별자 입니다.
where
Where
WHERE


3. 조건 2 - 숫자
숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 를 말합니다.
숫자를 문자의 일부로 해석하지 않는 것은 일반 문자와 숫자 사이에 차이점 때문입니다.
첫 문자는 숫자가 될 수 없음

바로 이 조건 때문인데요.
32Bit 와 같은 단어는 식별자가 될 수 없다 이죠.
이는 C/C++ 을 포함한 대부분의 언어가 지정하는 규약입니다.


4. 조건 3 - _ (Underscore)
밑줄이라고 합니다.
_ 는 문자의 하나로 특별한 제약은 없습니다.
식별자 앞,뒤,중간 어디에도 사용할 수 있습니다.
심지어 _ 하나로도 식별자를 만들 수 있습니다. 이는 추후 강좌에서 예제와 함께 설명하겠습니다.
단, _VERSION 과 같이 Lua 내부에서 사용하는 전역 식별자들이 _로 시작하여 모두 대문자로 이루어져있어 이러한 식별자들과 구분하는 것이 좋습니다.


5. 조건 4 - Keyword
모든 프로그래밍 언어가 그렇듯이 Lua 또한 keyword는 식별자로 사용할 수 없습니다.
and  break  do  else  elseif  end
false  for  function if  in  local
nil  not  or  repeat return then
true  until  while
추가로 모든 식별자에는 연산자와 같은 문자를 사용할 수 없습니다.
+ - * / % ^ #
== ~= <= >= < > =
( ) { } [ ] ;
: , . .. ...
C/C++ 에서 일반적으로 사용하는 identifier 규칙 그대로인 듯 합니다.
단지 _UPPERCASE 와 같은 _로 시작하고 대문자로 이루어진 많은 전역변수가 존재하여
이를 소스코드에서 사용할 때에 문법 오류 처리가 안된다는 것이 조금은 다르군요.
C/C++ 에서는 __FILE__ 과 같은 단어는 실행까지 못 가고 컴파일 타임에 오류를 검출할 수 있는데
Lua 는 이러한 부분도 모두 전역 변수이므로 자칫 잘못하면 원래 전역 변수 값을 덮어쓰는
무서운 결과를 초래합니다. 이는 실행 시간에도 정상 작동 하는 것 처럼 보이다 종국에
문제를 일으킬 가능성이 높아 아주 위험합니다.
_ 로 시작하는 단어만 주의한다면 별다른 어려움은 없겠습니다.

 

Ex.

1. 상수는 대문자와 밑줄만 사용한다   MY_CONSTANT

2. 변수는 소문자로 시작한다.            myVariable

3. 전연 변수는 소문자 g로 시작한다.  gMyGlobal

4. 함수는 대문자로 시작한다.            MyFunction()

5. 지역변수는 local 키워드 사용        local myValue

   < Tip - 지역변수 설정시 초기값을 주지 않으면  nil값을 가지게 된다. >


이것으로 이번 강좌를 마칩니다.

'LUA' 카테고리의 다른 글

Lua 03. math  (3) 2012.03.05
Lua 02. 함수  (1) 2012.03.05
Luci Reference: Templates  (3) 2012.02.17
LUA IDE 환경  (4) 2012.02.16
루아 에디트플러스에서 실행  (1) 2012.02.16
Posted by GUCCI
, |

jQuery Form Validation Plugin 


jQuery의 validation(검증) 플러그인이다. 일단 데모 페이지부터 보면 어떤 건지 알 수 있을 것이다.

validation 플러그인 데모 페이지

사용법은 사실 데모 페이지 긁어와서 이름만 고치는 정도로도 알 수 있을 텐데, 몇 가지 써 보자.

두 가지 방법으로 사용할 수 있다. 첫 번째는 심플한 방법이다.

첫 번째 방법

이 방법은 위 데모 페이지에서 위쪽에 있는 예시에 사용된 방법이다.

△이 첫 번째 방법은 javascript 코드가 간단하다는 장점이 있는 반면, 메시지가 영어로 나오고, html 코드에 들어갈 게 많아진다는 단점이 있다. 비표준 어트리뷰트가 사용된다는 점도 단점이다.

?
1
2
3
4
$(function(){
  // submit 시켰을 때 #form을 검증합니다.
  $("#form").validate();
});

javascript 코드에는 위와 같이 쓰고(물론 jquery.js를 위 코드 전에 호출해야 하는 건 당연하다.) html에는 이렇게 적는 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<form id="form" method="get" action="">
    <fieldset>
        <legend>잘 적어 주세요</legend>
        <p>
            <label for="cname">이름 (필수, 최소 2글자)</label>
            <input id="cname" name="name" class="required" minlength="2" />
        <p>
            <label for="cemail">E-Mail (필수)</label>
            <input id="cemail" name="email" class="required email" />
        </p>
        <p>
            <label for="curl">URL (선택)</label>
            <input id="curl" name="url" class="url" value="" />
        </p>
        <p>
            <label for="ccomment">남기실 말씀 (필수)</label>
            <textarea id="ccomment" name="comment" class="required"></textarea>
        </p>
        <p>
            <input class="submit" type="submit" value="Submit"/>
        </p>
    </fieldset>
</form>

위 코드에서 볼 수 있는 것처럼, html코드에 적어 주면 된다. 정리하면 다음과 같다.

  • 필수요소인 경우 class=”required” 라고 쓴다.
  • email 검증을 해야 하는 경우 class=”email”이라고 쓴다.
  • 필수이면서 이메일 검증을 해야 하는 경우에는 복수 클래스 병기하는 방법을 따라 class=”required email” 이라고 적으면 되고 나머지도 마찬가지다.
  • 최소 글자수가 있는 경우 minlength=”숫자” 형태로 적는다.

위와 같은 방법으로 했을 때의 최대 단점은 메시지가 영어로 나온다는 점이다. 필수 요소인데 안 적은 경우 ‘This field is required.’라는 메세지가 뜬다. 메세지를 한국어로 하고 싶다면 두 번째 방법을 사용하거나 내가 만든 한국어 확장 파일을 사용하면 된다. 한국어 확장의 코드는 아래와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: KO
 * Filename: messages_ko.js
 */
jQuery.extend(jQuery.validator.messages, {
    required: "반드시 입력해야 합니다.",
    remote: "수정 바랍니다.",
    email: "이메일 주소를 올바로 입력하세요.",
    url: "URL을 올바로 입력하세요.",
    date: "날짜가 잘못 입력됐습니다.",
    dateISO: "ISO 형식에 맞는 날짜로 입력하세요.",
    number: "숫자만 입력하세요.",
    digits: "숫자(digits)만 입력하세요.",
    creditcard: "올바른 신용카드 번호를 입력하세요.",
    equalTo: "값이 서로 다릅니다.",
    accept: "승낙해 주세요.",
    maxlength: $.validator.format("{0}글자 이상은 입력할 수 없습니다."),
    minlength: $.validator.format("적어도 {0}글자는 입력해야 합니다."),
    rangelength: $.validator.format("{0}글자 이상 {1}글자 이하로 입력해 주세요."),
    range: $.validator.format("{0}에서 {1} 사이의 값을 입력하세요."),
    max: $.validator.format("{0} 이하로 입력해 주세요."),
    min: $.validator.format("{0} 이상으로 입력해 주세요.")
});

다른 단점도 있다. minlength 라는 어트리뷰트는 웹표준 검증기를 통과하지 못한다. 표준 점수를 깎아먹을 수 있다는 것이다. 그게 사용성보다 중요한 요소는 아니지만, 웹을 잘 모르는 상관들에게는 중요할지 모른다.

두 번째 방법

이 방법은 모든 요소를 javascript 단에서 처리하기 때문에 가장 깔끔한 코드를 생산할 수 있다.

일단 코드를 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
$(function(){
  // validate signup form on keyup and submit
  $("#signupForm").validate({
    rules: {
      name: "required",
      password: {
        required: true,
        minlength: 8
      },
      confirm_password: {
        required: true,
        minlength: 8,
        equalTo: "#password"
      },
      email: {
        required: true,
        email: true
      },
      topic: {
        required: "#newsletter:checked",
        minlength: 2
      },
      agree: "required"
    },
    messages: {
      name: "이름을 입력해 주세요",
      password: {
        required: "암호를 입력해 주세요",
        minlength: "암호는 8자 이상이어야 합니다."
      },
      confirm_password: {
        required: "암호를 한 번 더 입력해 주세요",
        minlength: "암호는 8자 이상이어야 합니다.",
        equalTo: "암호가 일치하지 않습니다."
      },
      email: "형식에 맞는 이메일을 입력해 주세요.",
      agree: "정책 동의에 체크해 주세요"
    }
  });
});

위에서 눈여겨 볼 점은 validate 안에 들어있는 {} 안쪽 부분이다. 여기 옵션이 들어간다.

이 옵션 중 핵심적으로 사용된 것인 rules 옵션이다.

1
rules: {옵션오브젝트}

이런 형식으로 사용된다. 옵션 오브젝트는 어떻게 구성되는지 보자.

1
{name: "required"}

이렇게 씌인 게 있다. 이것은 name이 “name”인 놈은 필수라는 뜻이다. 다른 방식으로 적용할 수도 있는데 한 input(혹은 textarea)에 여러 개의 옵션을 걸 때다.

1
email: {required: true, email: true}

이런 식으로 들어가는데, 이 때 email: true 항목은 당연히 이메일형식 검증을 하겠다는 뜻이다.

rules 옵션 아래쪽에 있는 message 옵션은 rules에 대응되는 메시지들을 적어주면 된다. 위 형식을 참고하면 될 것이므로 굳이 일일이 설명하지 않겠다.

다음 html 코드를 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<form id="signupForm" method="get" action="">
  <fieldset>
    <legend>정보를 입력해 주세요</legend>
    <p>
      <label for="name">Lastname</label>
      <input id="name" name="name" />
    </p>
    <p>
      <label for="password">암호</label>
      <input id="password" name="password" type="password" />
    </p>
    <p>
      <label for="confirm_password">암호확인</label>
      <input id="confirm_password" name="confirm_password" type="password" />
    </p>
    <p>
      <label for="email">Email</label>
      <input id="email" name="email" />
    </p>
    <p>
      <label for="agree">개인정보 보호정책 동의</label>
      <input type="checkbox" class="checkbox" id="agree" name="agree" />
    </p>
    <p>
      <input class="submit" type="submit" value="제출"/>
    </p>
  </fieldset>
</form>

위 코드는 html 검증을 통과할 수 있는 깔끔한 코드다. label에 있는 for 어트리뷰트는 웹표준에 맞는 어트리뷰트다. 이 라벨이 어떤 인풋에 대한 것인지, 해당 인풋의 id를 써 주는 부분이다.

그러나 jQuery 검증 플러그인의 자바스크립트 코드에서 위 폼을 인식할 때는 name 어트리뷰트를 기준으로 하는 것이므로, name을 신경쓰면 된다. 즉, label은 선택이니 너무 눈 돌아가지 않아도 된다는 말이다.

name을 바탕으로 하므로 checkbox나 radio 같은 것도 검증이 가능하게 된다.

필수다! 하는 메시지의 스타일

자, 그럼 required 라고 써준 input에 입력을 안 하고 submit 버튼을 눌렀을 때(이 경우를 ‘에러가 났을 때’라고 표현하자.) 나올 스타일은 어디서 결정할까?

그건 따로 써줘야 한다. 미리 준비된 css는 제공하고 있지 않은 듯하다.

사용되는 페이지의 head 부분에 아래처럼 써 주면 된다.

두 경우를 제공하겠다. 첫 번째 것은 메시지가 input의 오른쪽에 나오는 디자인이다. 두 번째 것은 메시지가 input의 하단에 나오는 디자인이다. 둘 다 input의 테두리가 빨간 점선으로 변하고, 메시지도 빨간 색으로 뜬다. css 지식이 조금만 있다면 수정해서 자신이 원하는대로 사용할 수 있을 것이다.

1
2
3
4
5
6
7
8
9
<style type="text/css">
input.error, textarea.error{
  border:1px dashed red;
}
label.error{
  margin-left:10px;
  color:red;
}
</style>

위 스타일이 에러메시지를 input 오른쪽 공간에 띄워 주는 스타일이다.

1
2
3
4
5
6
7
8
9
<style type="text/css">
input.error, textarea.error{
  border:1px dashed red;
}
label.error{
  display:block;
  color:red;
}
</style>

이 스타일은 에러메시지를 input 하단에 띄워 주는 스타일이다.

jQuery Validation Plugin API 문서

API 문서를 보는 건 항상 귀찮은 일이지만, 유용한 일이기도 하다.

내가 보기에 API 문서 중 핵심은 rules다.

다양한 옵션의 API가 나와있는 주소를 곧장 링크할 테니 참고해서 보기 바란다.

jQuery 검증 플러그인 API 문서 : validate 함수의 option 사용법

'자바스크립트 > JQuery' 카테고리의 다른 글

jQuery checkbox control  (2) 2012.06.14
jQuery Selector  (4) 2012.03.05
Posted by GUCCI
, |

Luci Reference: Templates

LUA / 2012. 2. 17. 14:17

Reference: Templates

LuCI has a simple regex based template processor which parses HTML-files to Lua functions and allows to store precompiled template files. The simplest form of a template is just an ordinary HTML-file. It will be printed out to the user as is.

In LuCI every template is an object with an own scope. It can therefore be instanciated and each instance can has a different scope. As every template processor. LuCI supports several special markups. Those are enclosed in <% %>-Tags.

By adding a - right after the opening <% every whitespace before the markup will be stripped. Adding a - right before the closing %>will equivalently strip every whitespace behind the markup.

<<BR>>

Builtin functions and markups

Including Lua code

Markup:

<% code %>

Writing variables and function values

Syntax:

<% write (value) %>

Short-Markup:

<%=value%>

Including templates

Syntax:

<% include (templatename) %>

Short-Markup:

<%+templatename%>

Translating

Syntax:

<%= translate("Text to translate") %>

Short-Markup:

<%:Text to translate%>

Commenting

Markup:

<%# comment %>

Builtin constants

Name Value
REQUEST_URI The current URL (without server part)
controller Path to the Luci main dispatcher
resource Path to the resource directory
media Path to the active theme directory

'LUA' 카테고리의 다른 글

Lua 03. math  (3) 2012.03.05
Lua 02. 함수  (1) 2012.03.05
Lua 01. 문법  (0) 2012.03.05
LUA IDE 환경  (4) 2012.02.16
루아 에디트플러스에서 실행  (1) 2012.02.16
Posted by GUCCI
, |

최근에 달린 댓글

글 보관함