본문 바로가기
학습/Node.js

회원가입에서 공백, 특수문자 검사하기

코동이 2021. 4. 27.

 회원가입 시, 이름이나 아이디 공백을 처리하지 않아 "홍길동"처럼 저장되어야하는데 "홍길동 "으로 저장되는 경우가 있습니다. 가입자 입장에서 무의식으로 스페이스를 치고 가입을 하면 DB에 4글자가 들어가서 나중에 "홍길동"이라고 검색 조건을 걸었을 때 찾지 못하는 문제가 발생합니다. 따라서 공백을 제거하는 장치가 필요합니다.

 

 제 프로젝트 기준으로 프런트인 자바스크립트에서 검사하는 방법과, 백엔드인 자바 스프링에서 검사하는 방법이 있습니다. 또한 입력된 값의 공백을 제거해주는 방법과 공백이 있을 시 오류를 반환하는 방법이 있습니다.

 

 먼저 자바스크립트에서 공백과 특수문자를 검사하는 방법입니다.

var str = "...";

//공백만 입력된 경우
var blank_pattern = /^\s+|\s+$/g;
if(str.replace(blank_pattern, '' ) == "" ){
    alert('공백만 입력되었습니다.');
}

//문자열에 공백이 있는 경우
var blank_pattern = /[\s]/g;
if( blank_pattern.test(str) == true){
    alert('공백이 입력되었습니다.');
}

//특수문자가 있는 경우
var special_pattern = /[`~!@#$%^&*|\\\'\";:\/?]/gi;
if(special_pattern.test(str) == true){
    alert('특수문자가 입력되었습니다.');
}

//공백 혹은 특수문자가 있는 경우
if(str.search(/\W|\s/g) > -1){
    alert( '특수문자 또는 공백이 입력되었습니다.');
}

 

자바에서 공백과 특수문자 검사하는 방법입니다. Pattern을 사용하여 숫자, 한글, 알파벳 이외가 나오는지 검사합니다.

String str = "...";

//공백만 입력된 경우
if(str.replaceAll(" ", "").equals("")) {
  System.out.println("공백만 입력되었습니다.");
}

//특수문자가 입력된 경우
String pattern = "^[0-9|a-z|A-Z|ㄱ-ㅎ|ㅏ-ㅣ|가-힣|\s]*$";
if(!Pattern.matches(pattern, str)){
  System.out.println("특수문자가 입력되었습니다.");
}

//문자열에 공백 혹은 특수문자가 입력된 경우
String pattern = "^[0-9|a-z|A-Z|ㄱ-ㅎ|ㅏ-ㅣ|가-힣]*$";
if(!Pattern.matches(pattern, str)){
  System.out.println("공백 혹은 특수문자가 입력되었습니다.");
}

 자바스크립트와 자바에서 만약 문자열 사이의 공백을 지워주고 싶다면 모두 str.replace(" ",""); 의 형태로 작성해주면 됩니다. 자바에서는 지금 콘솔에 출력하는 형식으로 작성했지만, 오류검사를 위해 예외 발생으로 처리하면 됩니다. 혹은 간단하게 front에서 검사하고 싶다면 자바스크립트 검사를 넣어주도록 합니다.

 

아래는 자바 정규식을 만드는 문자열 설명입니다.

 ^  문자열의 시작
 문자열의 종료
 .  임의의 한 문자 (문자의 종류 가리지 않음)
 단, \ 는 넣을 수 없음
 *  앞 문자가 없을 수도 무한정 많을 수도 있음
 앞 문자가 하나 이상
 앞 문자가 없거나 하나있음
 []  문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를      나타낸다. []내에서 ^가 선행하여 존재하면 not 을 나타낸다.
 {}  횟수 또는 범위를 나타낸다.
 ()  소괄호 안의 문자를 하나의 문자로 인식 
 |  패턴 안에서 or 연산을 수행할 때 사용
 \s  공백 문자
 \S  공백 문자가 아닌 나머지 문자
 \w  알파벳이나 숫자
\W   알파벳이나 숫자를 제외한 문자
\d   숫자 [0-9]와 동일
\D   숫자를 제외한 모든 문자
 정규표현식 역슬래시(\)는 확장 문자
 역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미
(?i)   앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를 구분하지 않음

*출처

 - 자바스크립트 공백체크, 특수문자체크

 - 자바 정규표현식

반응형

'학습 > Node.js' 카테고리의 다른 글

node js 기본 모듈  (0) 2022.01.15
Var, Let, Const 차이점  (0) 2021.05.25
컴포넌트 ( 같은 레벨에서의 통신 )  (0) 2021.01.02
컴포넌트 통신 ( v-bind와 v-on)  (0) 2021.01.02
인스턴스와 컴포넌트 / MVVM  (0) 2021.01.02