채택완료

닉네임에 공백글자(ex. 공백 닉네임)을 허용하고 싶습니다.

질문답변을 검색에서 명쾌한 답변을 찾지 못해서 질문 올립니다.


닉네임 :  공백 허용   처럼 글자 중간에 공백을 허용하고자 합니다. 


관련사항을 검색해보니 아래의 내용에서 어딘가를 수정하면 될것으로 판단되는데,

가능한 시나리오는 해봤는데 모두 실패했습니다. 도움의 손길이 필요합니다.


1. 그누보드5 / bbs / ajax.mb_nick.php 내용중

if ($msg = empty_mb_nick($mb_nick)) die($msg);

if ($msg = valid_mb_nick($mb_nick)) die($msg);

if ($msg = count_mb_nick($mb_nick)) die($msg);

if ($msg = exist_mb_nick($mb_nick, $mb_id)) die($msg);

if ($msg = reserve_mb_nick($mb_nick)) die($msg);


2. 그누보드5 / bbs / register_form_update.php 내용중

    if ($msg = empty_mb_nick($mb_nick))     alert($msg, "", true, true); 

    if ($msg = empty_mb_email($mb_email))   alert($msg, "", true, true);

    if ($msg = reserve_mb_id($mb_id))       alert($msg, "", true, true);

    if ($msg = reserve_mb_nick($mb_nick))   alert($msg, "", true, true);

    // 이름에 한글명 체크를 하지 않는다.

    if ($msg = valid_mb_name($mb_name))     alert($msg, "", true, true);

    if ($msg = valid_mb_nick($mb_nick))     alert($msg, "", true, true);


3. 그누보드5 / lib / register.lib.php 

function valid_mb_nick($reg_mb_nick)

{

    if (!check_string($reg_mb_nick, G5_HANGUL + G5_ALPHABETIC + G5_NUMERIC + G5_SPECIAL))

        return "닉네임은 공백없이 한글, 영문, 숫자만 입력 가능합니다.";

    else

        return "";

}


답변 4개 / 댓글 2개

채택된 답변
+20 포인트

check_string 함수에서 공백이 걸리는군요. 수정해주셔야합니다

lib/common.lib.php에서 

check_string 검색하셔서

주석에 공백이라고 되어있는부분 소스를 주석처리해주세요.

답변에 대한 댓글 2개

이렇게 2가지 처리를 했는데, 닉네임 : 공백이 없어야 합니다. 라고 뜨네요.
제가 어떤 처리가 부족한 걸까요?

그누보드5 / lib / common.lib.php 내용에서
function check_string($str, $options)
{
...
}

를 복사해서 아래와 같이 추가

function check_string_nick($str, $options)
{
global $g5;

$s = '';
for($i=0;$i<strlen($str);$i++) {
$c = $str[$i];
$oc = ord($c);

// 한글
if ($oc >= 0xA0 && $oc <= 0xFF) {
if ($options & G5_HANGUL) {
$s .= $c . $str[$i+1] . $str[$i+2];
}
$i+=2;
}
// 숫자
else if ($oc >= 0x30 && $oc <= 0x39) {
if ($options & G5_NUMERIC) {
$s .= $c;
}
}
// 영대문자
else if ($oc >= 0x41 && $oc <= 0x5A) {
if (($options & G5_ALPHABETIC) || ($options & G5_ALPHAUPPER)) {
$s .= $c;
}
}
// 영소문자
else if ($oc >= 0x61 && $oc <= 0x7A) {
if (($options & G5_ALPHABETIC) || ($options & G5_ALPHALOWER)) {
$s .= $c;
}
}
// 공백
//else if ($oc == 0x20) {
// if ($options & G5_SPACE) {
// $s .= $c;
// }
//}
else {
if ($options & G5_SPECIAL) {
$s .= $c;
}
}
}

// 넘어온 값과 비교하여 같으면 참, 틀리면 거짓
return ($str == $s);
}


그누보드5 / lib / regiseter.lib.php 내용에서
function valid_mb_nick($reg_mb_nick)
{
if (!check_string(...

를 아래와 같이 수정

function valid_mb_nick($reg_mb_nick)
{
if (!check_string_nick(...
js/wrest.js

wrestNospace 함수 찾으셔서 여기서도 한번더 주석처리를 해줘야할것같네요

도움 감사합니다.

https://sir.kr/g5_tip/6417 에 팁으로 정리해서 올렸습니다.

꼼수적 의견


' ' 을 ' ' 로 변환후 저장

' ' 은 spacebar

' '는 ㄱ,[한자],1 


보기에만 공백이면 될때 공백 1개짜리에서만 가능하도록 제한하면 되지 않을까요

js/wrest.js

Copy
function wrestNospace(fld){    var pattern = /(\s)/g; // \s 공백 문자    if (pattern.test(fld.value)) {        if (wrestFld == null) {            wrestMsg = wrestItemname(fld) + " : 공백이 없어야 합니다.\n";            wrestFld = fld;        }    }}...// submit 할 때 속성을 검사한다.function wrestSubmit(){    wrestMsg = "";    wrestFld = null;    ......// 초기에 onsubmit을 가로채도록 한다.function wrestInitialized(){    for (var i = 0; i < document.forms.length; i++) {        // onsubmit 이벤트가 있다면 저장해 놓는다.        ......// 폼필드 자동검사$(document).ready(function(){    // onload    wrestInitialized();});

답변을 작성하려면 로그인이 필요합니다.