언어 및 도구들 공부/Javascript

RegexHelper

Dr.Mlem 2024. 9. 4. 17:54

 

class RegexHelper{

    /**

     * 값의 존재 여부를 검사한다

     * @param {string} selector 검사할 대상에 대한 <input>요소의 selector

     * @param {string} msg      값이 없을 경우 표시할 메시지 내용

     * @returns

     */

    value(selector, msg){

        const content = document.querySelector(selector).value;

 

        if(content === undefined|| content === null|| (typeof content ==='string' && content.trim().length===0)){

            throw new StringFormatException(msg, selector);

       

        }

 

        return true;

    }

selector(selector, msg, regexExpr){

        this.value(selector, msg);

 

        // 입력값에 대한 정규표현식 검사가 실패라면?

        if(!regexExpr.test(document.querySelector(selector).value.trim())){

            throw new StringFormatException(msg, selector);

        }

       

        return true;

    }

}

여기서, selector()메소드는 어떻게 작동하게 되는거야? 코드의 흐름을 보여주면서 설명해줘

답안 표시
 
 

selector() 메소드 작동 방식 설명

selector() 메소드는 입력값의 존재 여부를 확인하고, 정규 표현식을 사용하여 입력값의 유효성을 검사합니다. 검사에 실패하면 예외를 발생시킵니다.

코드 흐름:

  1. this.value(selector, msg) 호출:
    • value() 메소드를 호출하여 입력값의 존재 여부를 검사합니다.
    • value() 메소드는 selector를 사용하여 DOM에서 해당 요소를 찾고, 그 값을 가져옵니다.
    • 값이 없거나 빈 문자열인 경우 StringFormatException 예외를 발생시킵니다.
    • 값이 존재하면 true를 반환합니다.
  2. 정규 표현식 검사:
    • regexExpr.test(...)를 사용하여 입력값이 정규 표현식 regexExpr과 일치하는지 검사합니다.
    • 입력값은 selector를 사용하여 DOM에서 해당 요소를 찾고, 그 값을 가져와서 앞뒤 공백을 제거한 후 검사합니다.
    • 정규 표현식 검사에 실패하면 StringFormatException 예외를 발생시킵니다.
  3. true 반환:
    • 모든 검사를 통과하면 true를 반환합니다.

요약:

selector() 메소드는 다음과 같은 단계로 작동합니다.

  1. 입력값 존재 여부 검사 (value() 메소드 호출)
  2. 정규 표현식을 사용한 입력값 유효성 검사
  3. 모든 검사 통과 시 true 반환, 실패 시 StringFormatException 예외 발생
 
 
 
 
 

selector(selector, msg, regexExpr){

        this.value(selector, msg);

 

        // 입력값에 대한 정규표현식 검사가 실패라면?

        if(!regexExpr.test(document.querySelector(selector).value.trim())){

            throw new StringFormatException(msg, selector);

        }

       

        return true;

    }

이것만 보았을때, 이 메소드가 하는 것은 뭐야?

답안 표시
 
 
분석 완료
 

제공된 코드 조각만으로 판단하면, selector 메소드는 다음과 같은 기능을 수행합니다.

  1. 입력값 존재 여부 확인: this.value(selector, msg)를 호출하여 selector로 지정된 HTML 요소의 값이 존재하는지 확인합니다. 값이 없으면 예외를 발생시킵니다.
  2. 정규 표현식 검사: regexExpr.test(...)를 사용하여 입력값이 주어진 정규 표현식 regexExpr과 일치하는지 확인합니다. 입력값은 selector로 지정된 HTML 요소에서 가져오며, 앞뒤 공백을 제거한 후 검사합니다. 정규 표현식과 일치하지 않으면 예외를 발생시킵니다.
  3. 성공 반환: 모든 검사를 통과하면 true를 반환합니다.

요약: selector 메소드는 특정 HTML 요소의 값이 존재하는지 확인하고, 해당 값이 주어진 정규 표현식과 일치하는지 검증하는 역할을 합니다. 검증에 실패하면 예외를 발생시켜 오류 처리를 용이하게 합니다.

 
 
 
 
 

if(!regexExpr.test(document.querySelector(selector).value.trim())){

            throw new StringFormatException(msg, selector);

이게 어떤 말이야?

 
답안 표시
 

이 코드는 다음과 같은 의미를 가집니다.

만약, 정규표현식 검사에 실패한다면, 예외를 발생시켜라.

좀 더 자세히 설명하면,

  1. document.querySelector(selector).value.trim():
    • document.querySelector(selector): HTML 문서에서 selector에 해당하는 첫 번째 요소를 찾습니다.
    • .value: 해당 요소의 값(value)을 가져옵니다. (주로 input, textarea 등의 입력 필드에서 사용됨)
    • .trim(): 가져온 값의 앞뒤 공백을 제거합니다.
  2. regexExpr.test(...):
    • regexExpr (정규표현식 객체)의 test() 메서드를 사용하여, 위에서 가져온 값이 정규표현식 패턴과 일치하는지 검사합니다.
    • 일치하면 true, 일치하지 않으면 false를 반환합니다.
  3. !regexExpr.test(...):
    • ! 연산자를 통해 test() 메서드의 결과를 반전시킵니다. 즉, 정규표현식 검사에 실패했을 때 true가 됩니다.
  4. if(!regexExpr.test(...):
    • 만약 정규표현식 검사에 실패했다면, if 문 안의 코드 블록을 실행합니다.
  5. throw new StringFormatException(msg, selector);:
    • StringFormatException 이라는 사용자 정의 예외를 생성하고, 해당 예외를 발생시킵니다 (throw).
    • 이 예외에는 에러 메시지(msg)와 문제가 발생한 요소의 선택자(selector) 정보를 담아서, 오류 처리 코드에서 해당 정보를 활용할 수 있도록 합니다.

요약: 이 코드는 입력된 값이 특정 정규표현식 패턴과 일치하지 않을 경우, 사용자 정의 예외(StringFormatException)를 발생시켜 에러 처리를 유도하는 역할을 합니다. 주로 입력값 유효성 검사 등에 사용될 수 있습니다.

 

=====이하 ChatGPT=====

 

 

저기서, regexExpr은 뭔데 test 메소드를 가지고 있는거야?

 

regexExpr는 자바스크립트에서 정규 표현식(Regular Expression)을 나타내는 객체입니다. 정규 표현식은 문자열에서 특정 패턴을 찾기 위해 사용되며, 자바스크립트에서는 이를 위한 특별한 구문과 메소드를 제공합니다.

정규 표현식 객체 (RegExp)

자바스크립트에서 정규 표현식은 RegExp 객체로 표현됩니다. 이 객체는 문자열을 처리할 때 특정 패턴을 검색하거나 대체하는 데 사용되는 메소드를 제공합니다.

test() 메소드

test() 메소드는 RegExp 객체의 메소드 중 하나로, 주어진 문자열이 정규 표현식에 일치하는지 확인합니다. 이 메소드는 일치할 경우 true를, 일치하지 않을 경우 false를 반환합니다.

예시

예를 들어, 이메일 주소의 유효성을 검사하는 간단한 정규 표현식은 다음과 같이 작성할 수 있습니다:

 
var regexExpr = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;

 

여기서:

  • ^은 문자열의 시작을 나타냅니다.
  • [a-zA-Z0-9._-]+는 하나 이상의 영문자, 숫자, 점, 언더스코어, 또는 하이픈을 의미합니다.
  • @는 리터럴 문자 @를 지정합니다.
  • [a-zA-Z0-9.-]+는 하나 이상의 영문자, 숫자, 점 또는 하이픈을 의미합니다.
  • \.는 점 문자를 리터럴로 표현합니다 (점은 정규 표현식에서 특별한 의미를 가지므로 이스케이프 처리가 필요합니다).
  • [a-zA-Z]{2,6}는 2~6자리의 영문자를 의미합니다.
  • $는 문자열의 끝을 나타냅니다.

이 정규 표현식을 사용해 이메일의 형식을 검증하려면:

 
var email = "example@example.com";
if (regexExpr.test(email)) {
    console.log("유효한 이메일 주소입니다.");
} else {
    console.log("유효하지 않은 이메일 주소입니다.");
}

test() 메소드를 통해 email 변수의 값이 이 정규 표현식과 일치하는지 검사하고, 결과에 따라 적절한 메시지를 출력합니다.

 
 
4

Q.

그럼 저건 자체적으로 test 메소드를 가지고 있다는 소리야?

 
ChatGPT

네, 맞습니다. 자바스크립트의 RegExp 객체는 자체적으로 test() 메소드를 가지고 있습니다. 이 메소드는 문자열이 정규 표현식과 일치하는지 여부를 검사하여 true 또는 false 값을 반환합니다. 이는 정규 표현식을 사용한 패턴 매칭 기능의 핵심 부분이며, 입력 검증, 문자열 검색, 데이터 포맷팅 등 다양한 상황에서 유용하게 사용됩니다.

 
 
Q:
내가 준 JS 코드에는 regexExpr을 따로 선언한건 없는게 맞지?
 

ChatGPT said:

ChatGPT

네, 맞습니다. 제공하신 코드 예제에는 regexExpr 변수의 선언이 포함되어 있지 않습니다. 코드에서 regexExpr를 사용하는 부분만 보이며, 이 변수가 실제로 어떤 정규 표현식을 담고 있는지는 명시되어 있지 않습니다.

selector() 메소드에서 regexExpr를 사용하기 전에 해당 변수에 대해 적절한 정규 표현식 객체를 할당하는 부분이 필요합니다. 예를 들어, 이메일 형식을 검사하려는 경우 다음과 같이 regexExpr를 정의할 수 있습니다:

 
javascript
var regexExpr = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;

이와 같은 정의가 코드 상에 추가되어야 실제로 selector() 메소드에서 정규 표현식 검사를 수행할 수 있습니다.

'언어 및 도구들 공부 > Javascript' 카테고리의 다른 글

RegexHelper 3  (0) 2024.09.04
RegexHelper 2  (0) 2024.09.04
document.querySelector(); 로 지정된 대상  (0) 2024.09.03
에러 클래스 생성자 파라미터  (0) 2024.09.03
super()  (0) 2024.09.03