jnk1m
Foliage IT
jnk1m
전체 방문자
오늘
어제
  • 분류 전체보기 (209)
    • Today I Learned (34)
    • Java (47)
    • Database (15)
    • [NHN Academy] (27)
    • Spring (47)
    • HTML + CSS + JavaScript (11)
    • JSP (3)
    • Node.js (10)
    • React Native (2)
    • 기타 (8)
    • 스크랩 (5)

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
글쓰기 / 관리자
jnk1m

Foliage IT

Today I Learned

[TIL]23/8/2 고객용 주문 번호 생성, 유효성 검사, 시간대 포맷팅, 정규표현식

2023. 8. 2. 18:20

0. 고객용 주문 번호 생성

실제 ID는 그대로 두고, 고객에게 보여주는 용도의 추가적인 주문 번호 컬럼을 추가하고, 생성 코드를 구현했다. 이 주문 번호를 통해 고객은 주문을 조회할 수 있다. 주문 번호 생성은 현재 시간 + 난수 조합으로, 밀리초와 랜덤 알파벳, 숫자를 사용한다.

 

1. 웹 폼 유효성 검사:

주문을 할 때 고객으로부터 입력받는 필드의 유효성 검사 코드를 추가했다.

이러한 유효성 검사는 클라이언트 + 서버 양쪽에서 모두 진행하는게 좋음

 

클라언트측 코드:

<script>
    function validateForm() {
        var firstName = document.forms["myForm"]["firstName"].value;
        var lastName = document.forms["myForm"]["lastName"].value;
        var bldgNo = document.forms["myForm"]["bldgNo"].value;
        var roomNo = document.forms["myForm"]["roomNo"].value;
        var instructions = document.forms["myForm"]["instructions"].value;
        var namePattern = /^[A-Za-z .'-]+$/;
        var bldgNoPattern = /^[A-Za-z0-9 .'-]+$/;
        var roomNoPattern = /^[0-9]+$/;

        if (!firstName.match(namePattern) || !lastName.match(namePattern)) {
            alert("Name must contain only alphabet characters");
            return false;
        }

        if (!bldgNo.match(bldgNoPattern)) {
            alert("Building number must contain only alphanumeric characters");
            return false;
        }

        if (!roomNo.match(roomNoPattern)) {
            alert("Room number must contain only numeric characters");
            return false;
        }

        if ((firstName + " " + lastName).length > 50) {
            alert("Full name must be 50 characters or less");
            return false;
        }

        if ((bldgNo + " " + roomNo).length > 200) {
            alert("Delivery address must be 200 characters or less");
            return false;
        }

        if ((instructions).length > 200) {
            alert("Instructions must be 200 characters or less");
            return false;
        }
    }
</script>

그리고 유효성 검사를 할 Form에 onsubmit="return validateForm()"을 추가하고, myForm이라는 name 속성, button onlick= "return" 또한 추가한다.

 

2. 시간대 변환과 포맷팅: 

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM dd, yyyy HH:mm");
ZonedDateTime customerDateTime = order.getOrderDate().withZoneSameInstant(ZoneId.of("Asia/Seoul"));
String formattedDateTime = customerDateTime.format(formatter);

MMM으로 하면 그 달의 이름이 나온다는거 기억하기!

클라이언트로부터 고객 zoneID 가져오는 코드는 추가 구현 필요

 

3. RuntimeException vs IllegalArgumentException

👉 RuntimeException: 일반적으로 프로그래머의 오류를 나타낸다. 예를 들자면, NP는 객체 참조가 null인 경우에 발생하는 RuntimeException의 하위 클래스다. 

 

👉IllegalArgumentException: 메서드에 부적잘한 인자가 전달되었음을 나타낸다. (메서드에 부적절한 값이 전달된 경우)

 

4. 정규표현식

 

 

Pattern (Java Platform SE 8 )

Enables canonical equivalence. When this flag is specified then two characters will be considered to match if, and only if, their full canonical decompositions match. The expression "a\u030A", for example, will match the string "\u00E5" when this flag is s

docs.oracle.com

 

 

\d less efficient than [0-9]

I made a comment yesterday on an answer where someone had used [0123456789] in a regex rather than [0-9] or \d. I said it was probably more efficient to use a range or digit specifier than a charac...

stackoverflow.com

 

    'Today I Learned' 카테고리의 다른 글
    • [TIL] 23/8/22 AWS S3 설정, 이미지 업로드 코드
    • [TIL] 23/8/18 Category 테이블 View 추가 + 뷰 생성법, 사용법, Spring boot entity 작성
    • [TIL] 23/8/1 트랜잭션, JPA 쿼리 최적화, 시간대 관리: IN절, ZonedDateTime, DB에 들어가는 시간이 다를 때 해결 방법
    • [TIL] 23/07/31 서버 시간을 UTC로 저장해야하는 이유와 방법 + 타임존

    티스토리툴바