You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
4.4 KiB
141 lines
4.4 KiB
<?php
|
|
defined('BASEPATH') OR exit('No direct script access allowed');
|
|
|
|
/**
|
|
* Form Validation Class
|
|
*
|
|
* @package CodeIgniter
|
|
* @subpackage Libraries
|
|
* @category Validation
|
|
* @author EllisLab Dev Team
|
|
* @link <a href="https://codeigniter.com/user_guide/libraries/form_validation.html" target="_blank">https://codeigniter.com/user_guide/libraries/form_validation.html</a>
|
|
*/
|
|
class WB_Form_validation extends CI_Form_validation {
|
|
|
|
function __construct() {
|
|
parent::__construct();
|
|
}
|
|
|
|
public function error($field, $prefix = '', $suffix = '')
|
|
{
|
|
if (empty($this->_field_data[$field]['error']))
|
|
{
|
|
return '';
|
|
}
|
|
|
|
if ($prefix === '')
|
|
{
|
|
$prefix = $this->_error_prefix;
|
|
}
|
|
|
|
if ($suffix === '')
|
|
{
|
|
$suffix = $this->_error_suffix;
|
|
}
|
|
|
|
return $this->josa_conv($prefix.$this->_field_data[$field]['error'].$suffix);
|
|
}
|
|
|
|
public function error_string($prefix = '', $suffix = '')
|
|
{
|
|
// No errors, validation passes!
|
|
if (count($this->_error_array) === 0)
|
|
{
|
|
return '';
|
|
}
|
|
|
|
if ($prefix === '')
|
|
{
|
|
$prefix = $this->_error_prefix;
|
|
}
|
|
|
|
if ($suffix === '')
|
|
{
|
|
$suffix = $this->_error_suffix;
|
|
}
|
|
|
|
// Generate the error string
|
|
$str = '';
|
|
foreach ($this->_error_array as $val)
|
|
{
|
|
if ($val !== '')
|
|
{
|
|
$str .= $prefix.$val.$suffix."\n";
|
|
}
|
|
}
|
|
|
|
// return $str;
|
|
return $this->josa_conv($str);
|
|
}
|
|
|
|
/**
|
|
* 문장에서 조사를 적절하게 변환시킵니다.
|
|
*/
|
|
public function josa_conv($str)
|
|
{
|
|
$josa = '이가은는을를과와';
|
|
|
|
return preg_replace_callback("/(.)\\{([{$josa}])\\}/u",
|
|
function($matches) use($josa) {
|
|
// 조사 바로 앞 한글자
|
|
$lastChar = $matches[1];
|
|
$postpositionMatched = $matches[2];
|
|
|
|
$arrPostposition = array(
|
|
'N' => $postpositionMatched,
|
|
'Y' => $postpositionMatched
|
|
);
|
|
$pos = mb_strpos($josa, $postpositionMatched);
|
|
if ($pos % 2 != 0) {
|
|
$arrPostposition['Y'] = mb_substr($josa, $pos-1, 1);
|
|
} else {
|
|
$arrPostposition['N'] = mb_substr($josa, $pos+1, 1);
|
|
}
|
|
|
|
// 기본값 : 종성있음
|
|
$lastCharStatus = 'Y';
|
|
|
|
// 2바이트 이상 유니코드 문자
|
|
if (strlen($lastChar) > 1) {
|
|
|
|
switch (strlen($lastChar)) {
|
|
case 1:
|
|
$lastchar_code = ord($lastChar);
|
|
break;
|
|
case 2:
|
|
$lastchar_code = ((ord($lastChar[0]) & 0x1F) << 6) | (ord($lastChar[1]) & 0x3F);
|
|
break;
|
|
case 3:
|
|
$lastchar_code = ((ord($lastChar[0]) & 0x0F) << 12) | ((ord($lastChar[1]) & 0x3F) << 6) | (ord($lastChar[2]) & 0x3F);
|
|
break;
|
|
case 4:
|
|
$lastchar_code = ((ord($lastChar[0]) & 0x07) << 18) | ((ord($lastChar[1]) & 0x3F) << 12) | ((ord($lastChar[2]) & 0x3F) << 6) | (ord($lastChar[3]) & 0x3F);
|
|
break;
|
|
default:
|
|
$lastchar_code = $lastChar;
|
|
}
|
|
|
|
$code = $lastchar_code - 44032;
|
|
|
|
// 한글일 경우 (가=0, 힣=11171)
|
|
if ($code > -1 && $code < 11172) {
|
|
// 초성
|
|
//$code / 588
|
|
// 중성
|
|
//$code % 588 / 28
|
|
// 종성
|
|
if ($code % 28 == 0) $lastCharStatus = 'N';
|
|
}
|
|
// 1바이트 ASCII
|
|
} else {
|
|
// 숫자중 2(이),4(사),5(오),9(구)는 종성이 없음
|
|
if (strpos('2459', $lastChar) > -1) {
|
|
$lastCharStatus = 'N';
|
|
}
|
|
}
|
|
return $lastChar.$arrPostposition[$lastCharStatus];
|
|
|
|
}, $str
|
|
);
|
|
}
|
|
}
|