특수문자 허용문제 정보
특수문자 허용문제본문
define('_G4_ALPHAUPPER_', 1); // 영대문자
define('_G4_ALPHALOWER_', 2); // 영소문자
define('_G4_ALPHABETIC_', 4); // 영대,소문자
define('_G4_NUMERIC_', 8); // 숫자
define('_G4_HANGUL_', 16); // 한글
define('_G4_SPACE_', 32); // 공백
define('_G4_SPECIAL_', 64); // 특수문자
function check_string($str, $options)
{
global $g4;
$s = '';
for($i=0;$i<strlen($str);$i++) {
$c = $str[$i];
$oc = ord($c);
// 한글
if ($oc >= 0xA0 && $oc <= 0xFF) {
if (strtoupper($g4['charset']) == 'UTF-8') {
if ($options & _G4_HANGUL_) {
$s .= $c . $str[$i+1] . $str[$i+2];
}
$i+=2;
} else {
// 한글은 2바이트 이므로 문자하나를 건너뜀
$i++;
if ($options & _G4_HANGUL_) {
$s .= $c . $str[$i];
}
}
}
// 숫자
else if ($oc >= 0x30 && $oc <= 0x39) {
if ($options & _G4_NUMERIC_) {
$s .= $c;
}
}
// 영대문자
else if ($oc >= 0x41 && $oc <= 0x5A) {
if (($options & _G4_ALPHABETIC_) || ($options & _G4_ALPHAUPPER_)) {
$s .= $c;
}
}
// 영소문자
else if ($oc >= 0x61 && $oc <= 0x7A) {
if (($options & _G4_ALPHABETIC_) || ($options & _G4_ALPHALOWER_)) {
$s .= $c;
}
}
// 공백
else if ($oc >= 0x20) {
if ($options & _G4_SPACE_) {
$s .= $c;
}
}
else {
if ($options & _G4_SPECIAL_) {
$s .= $c;
}
}
}
return ($str == $s);
}
if (!check_string($reg_mb_nick, _G4_HANGUL_ + _G4_ALPHABETIC_ + _G4_NUMERIC_ + _G4_SPECIAL_)) {
echo "110"; // 별명은 공백없이 한글, 영문, 숫자만 입력 가능합니다.
}
지금은 한글, 영문, 숫자만 가능한데 특수문자를 추가하려고 합니다.
check_string함수 끝에 _G4_SPECIAL_를 추가했는데도
특수문자가 들어가면 110이 찍히네요
어떻게 수정해야 할까요?
define('_G4_ALPHALOWER_', 2); // 영소문자
define('_G4_ALPHABETIC_', 4); // 영대,소문자
define('_G4_NUMERIC_', 8); // 숫자
define('_G4_HANGUL_', 16); // 한글
define('_G4_SPACE_', 32); // 공백
define('_G4_SPECIAL_', 64); // 특수문자
function check_string($str, $options)
{
global $g4;
$s = '';
for($i=0;$i<strlen($str);$i++) {
$c = $str[$i];
$oc = ord($c);
// 한글
if ($oc >= 0xA0 && $oc <= 0xFF) {
if (strtoupper($g4['charset']) == 'UTF-8') {
if ($options & _G4_HANGUL_) {
$s .= $c . $str[$i+1] . $str[$i+2];
}
$i+=2;
} else {
// 한글은 2바이트 이므로 문자하나를 건너뜀
$i++;
if ($options & _G4_HANGUL_) {
$s .= $c . $str[$i];
}
}
}
// 숫자
else if ($oc >= 0x30 && $oc <= 0x39) {
if ($options & _G4_NUMERIC_) {
$s .= $c;
}
}
// 영대문자
else if ($oc >= 0x41 && $oc <= 0x5A) {
if (($options & _G4_ALPHABETIC_) || ($options & _G4_ALPHAUPPER_)) {
$s .= $c;
}
}
// 영소문자
else if ($oc >= 0x61 && $oc <= 0x7A) {
if (($options & _G4_ALPHABETIC_) || ($options & _G4_ALPHALOWER_)) {
$s .= $c;
}
}
// 공백
else if ($oc >= 0x20) {
if ($options & _G4_SPACE_) {
$s .= $c;
}
}
else {
if ($options & _G4_SPECIAL_) {
$s .= $c;
}
}
}
return ($str == $s);
}
if (!check_string($reg_mb_nick, _G4_HANGUL_ + _G4_ALPHABETIC_ + _G4_NUMERIC_ + _G4_SPECIAL_)) {
echo "110"; // 별명은 공백없이 한글, 영문, 숫자만 입력 가능합니다.
}
지금은 한글, 영문, 숫자만 가능한데 특수문자를 추가하려고 합니다.
check_string함수 끝에 _G4_SPECIAL_를 추가했는데도
특수문자가 들어가면 110이 찍히네요
어떻게 수정해야 할까요?
댓글 전체
한글 영문 숫자 특수문자 를 추가 하면 차라리 공백 검사를 안하는게 안난가요?
공백만 등록 안되게 안될까요?