본문 바로가기
Project

자바스크립트로 문자의 개수를 카운트해주는 프로그램 만들기

by 보라코끼리 2021. 10. 19.
728x90

메인화면

 

a ~ z 까지의 문자 카운터
A ~ Z 까지의 문자 카운터
0 ~ 9 까지의 문자 카운터

  • a ~ z , A ~ Z , 0 ~ 9 까지의 문자를 카운트하는 프로그램을 만든다.
  • 영문과 숫자의 입력만 가능하도록 입력받고 각각의 문자의 개수를 카운트한다.
  • a ~ z , A ~ Z , 0 ~ 9 를 각각의 테이블로 만들어 출력한다.

1단계 : html 형식으로 표현

  • 메인 화면을 html 태그를 이용하여 틀을 잡아준다.
<form>
    <label for="alpha">문자 카운터</label><br/>
    <textarea id="alpha" placeholder="영어와 숫자만 입력가능합니다." rows="4" cols="50" onKeyup="this.value = this.value.replace(/[^a-zA-Z0-9\s]/g,'');"></textarea></br>
    <input type="submit" value="확인해보기" onclick="count()"/>
</form>
  • 사용한 태그
    • <form> 태그 
      • <input> 태그의 type을 submit 으로 설정하기 위해 <form> 태그를 적어주었다.
    • <label> 태그
      • <textarea> 태그를 문자 카운터라는 문자를 눌러도 사용할 수 있도록 하기 위해 for속성의 값을 <textarea> 태그의 id값인 alpha로 주었다.
    • <textarea> 태그
      • <input> 태그를 이용해서 문자의 입력을 받을 수도 있지만 이 경우 많은 문자를 작성하게 되면 모든 문자를 보기 힘들어진다.
      • <input type="text"/>의 경우 문자가 짤린다.
      • 때문에 여러 문자를 입력할 수 있는 <textarea> 태그를 활용하였다.
    • <input> 태그
      • type="submit"의 버튼을 생성하기 위해 <input> 태그를 활용하였다. 
      • value="확인해보기"로 주어 확인해보기 버튼을 클릭하면 <form> 을 전송하도록 하였다.
      • 전송 위치는 onclick="count()"로 표현하여 count() 함수를 호출하게 하였다.

 

  • 문자 카운터
    • 영어와 숫자만 입력가능하도록 설정할 예정이기 때문에 이를 표시해주기 위해서 <textarea> 태그의 속성 중 placeholder 속성을 이용하였다.
    • 기본적으로 화면에 표시되는 textarea 입력창의 크기를 조절하기 위해 rows="4" cols="50"의 속성을 추가하였다. 
    • a ~ z , A ~ Z , 0 ~ 9 까지의 문자만을 입력할 수 있도록 onKeyup 속성을 이용하여 정규표현식으로 이를 설정하였다.

2단계 : javascript로 count() 함수 구현

  • 위의 html 코드의 <input onclick="count()"> 를 통해 자바스크립트의 count() 함수를 호출하도록 하였다. 
function count() {
    var alpha = document.getElementById("alpha").value;
    var splitedAlpha = alpha.split('');
    var alphaObj = {};
    
    // a ~ z 테이블
    document.write('<table border="1">');
    for (i = 'a'.charCodeAt(0); i <= 'z'.charCodeAt(0); i++) {
        var number_lowerCase = 0;
        for (j = 0; j < splitedAlpha.length; j++) {
            if (splitedAlpha[j] == String.fromCharCode(i)) {
                number_lowerCase++;
            }
        }
        alphaObj = {name: String.fromCharCode(i), number: number_lowerCase};
        document.write('<tr><td>' + alphaObj.name + '</td><td>' + alphaObj.number + '개 </td></tr>');
    }
    document.write('</table>');
    
    //  A ~ Z 테이블
    document.write('<table border = "1">');
    for (i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) {
        var number_upperCase = 0;
        for (j = 0; j < splitedAlpha.length; j++) {
            if (splitedAlpha[j] == String.fromCharCode(i)) {
                number_upperCase++;
            }
        }
        alphaObj = {name: String.fromCharCode(i), number: number_upperCase};
        document.write('<tr><td>' + alphaObj.name + '</td><td>' + alphaObj.number + '개 </td></tr>');
    }
    document.write('</table>');
    
    // 0 ~ 9 테이블
    document.write('<table border = "1">');
    for (i = '0'.charCodeAt(0); i <= '9'.charCodeAt(0); i++) {
        var number_number = 0;
        for (j = 0; j < splitedAlpha.length; j++) {
            if (splitedAlpha[j] == String.fromCharCode(i)) {
                number_number++;
            }
        }
        alphaObj = {name: String.fromCharCode(i), number: number_number};
        document.write('<tr><td>' + alphaObj.name + '</td><td>' + alphaObj.number + '개 </td></tr>');
    }
    document.write('</table>');
    
}
728x90
  • 사용한 변수
    • id가 alpha인 <input> 태그의 값을 변수 alpha에 담았다.
    • 이 변수 alpha의 값을 한 문자 단위로 나누어 splitedAlpha 변수에 담기 위해 split() 함수를 사용하였다.
    • 각 문자와 문자에 대한 수를 저장하기 위해 객체를 사용하기로 하고 이를 alphaObj  로 선언하였다.
  • a ~ z 테이블
    • 부터 까지의 수를 세기 위해 문자 자체로의 코드가 필요했다.
      • 이를 위해 charCodeAt() 함수를 이용하여 문자에 대한 코드를 사용하였다.
      • 부터 z 까지 for 반복문을 돌며 확인하도록 하였다.
    • alphaObj 라는 객체에 name 값으로 문자를, number 값으로 개수를 넣기 위해 number_lowerCase를 선언해두었다.
    • 입력한 문자열을 문자단위로 나누어둔 spllitedAlpha의 i 번째 값이 a ~ z 까지의 문자와 맞는지 확인하기 위해 String.fromCharCode() 함수를 사용하였다.
      • 문자가 같다면 number_lowerCase를 1 증가시키도록 하였다.
    • 문자의 이름과 수를 alphaObj에 저장하고 이를 테이블 형태로 출력해주었다.
  • A ~ Z 테이블과 0 ~ 9 테이블 역시 위의 방법과 동일하게 작업하였다.

전체 코드

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form>
        <input type="text">
        <label for="alpha">문자 카운터</label><br>
        <textarea id="alpha" placeholder="영어와 숫자만 입력가능합니다." rows="4" cols = "50" onKeyup = "this.value = this.value.replace(/[^a-zA-Z0-9\s]/g,'');"></textarea><br>
        <input type="submit" value="확인해보기" onclick="count()">
    </form>

    <script>
        function count() {
            var alpha = document.getElementById("alpha").value;
            var splitedAlpha = alpha.split('');
            var alphaObj = {};
            
            // a ~ z 테이블
            document.write('<table border="1">');
            for (i = 'a'.charCodeAt(0); i <= 'z'.charCodeAt(0); i++) {
                var number_lowerCase = 0;
                for (j = 0; j < splitedAlpha.length; j++) {
                    if (splitedAlpha[j] == String.fromCharCode(i)) {
                        number_lowerCase++;
                    }
                }
                alphaObj = {name: String.fromCharCode(i), number: number_lowerCase};
                document.write('<tr><td>' + alphaObj.name + '</td><td>' + alphaObj.number + '개 </td></tr>');
            }
            document.write('</table>');
            
            //  A ~ Z 테이블
            document.write('<table border = "1">');
            for (i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) {
                var number_upperCase = 0;
                for (j = 0; j < splitedAlpha.length; j++) {
                    if (splitedAlpha[j] == String.fromCharCode(i)) {
                        number_upperCase++;
                    }
                }
                alphaObj = {name: String.fromCharCode(i), number: number_upperCase};
                document.write('<tr><td>' + alphaObj.name + '</td><td>' + alphaObj.number + '개 </td></tr>');
            }
            document.write('</table>');
            
            // 0 ~ 9 테이블
            document.write('<table border = "1">');
            for (i = '0'.charCodeAt(0); i <= '9'.charCodeAt(0); i++) {
                var number_number = 0;
                for (j = 0; j < splitedAlpha.length; j++) {
                    if (splitedAlpha[j] == String.fromCharCode(i)) {
                        number_number++;
                    }
                }
                alphaObj = {name: String.fromCharCode(i), number: number_number};
                document.write('<tr><td>' + alphaObj.name + '</td><td>' + alphaObj.number + '개 </td></tr>');
            }
            document.write('</table>');
            
        }
    </script>
</body>
</html>

 

 

 

728x90