/**
* 全角を半角にする
* @param string $instr 変換前文字列
* @return string 変換後文字列
*/
function zen2han($instr) {
$flag = FALSE; //直前文字が全角カタカナならTRUE
$len = mb_strlen($instr);
$ofst = 1;
$outstr = '';
for ($ofst = 0; $ofst < $len; $ofst++) {
$ch = mb_substr($instr, $ofst, 1);
if ($ch == 'ー') {
if ($flag) $outstr .= 'ー'; //カタカナの長音記号
else $outstr .= $ch;
} else if (mb_ereg_match('[ァ-ヶ]+', $ch)) { //カタカナの範囲
$outstr .= mb_convert_kana($ch, 'k');
$flag = TRUE;
} else if (mb_ereg_match('[0-9]+', $ch)) { //全角数字の範囲
$outstr .= mb_convert_kana($ch, 'n');
$flag = TRUE;
} else if (mb_ereg_match('[A-Z]+', $ch)) { //全角英字の範囲
$outstr .= mb_convert_kana($ch, 'r');
$flag = TRUE;
} else if (mb_ereg_match('[ぁ-ん]+', $ch)) { //ひらがなの範囲
$flag = TRUE;
$outstr .= mb_convert_kana($ch, 'h');
} else {
$outstr .= $ch;
$flag = FALSE;
}
}
return $outstr;
}
/**
* 全角のみチェック
* @param $value
* [0]: 項目名
* [1]: value
* [2]: エラーコード
(必要ではない)
*/
function EC_FULL_ONLY_CHECK($value) {
if (isset($this->arrErr[$value[0]])) {
return;
}
$this->createParam($value);
// 値
$str = $this->arrParam[$value[1]];
//全角
for($i = 0; $i < mb_strlen($str, CHAR_CODE); $i++) {
if ((ord(mb_substr($str, $i, 1, CHAR_CODE)) < 128) || preg_match("/^[ヲ-゚ー]+$/u", $str)) {
// エラーコードがある場合
//$this->arrErr[$value[1]] = "※ " . $value[0] . "は全角文字を入力してください。
";
$this->arrErr[$value[1]] = SC_Utils_Ex::sfGetMessage(VALIDATION_STRING_TYPE_ZENKAKU, $value[0]);
break;
}
}
}
/**
* 1半角数字英字文字以上のチェック(EC用)
*
* @param $value
* [0]: 項目名
* [1]: value
*/
function EC_HALF_NUMBER_ENG_CHECK($value) {
if(isset($this->arrErr[$value[1]])) {
return;
}
$this->createParam($value);
// 値
$str = $this->arrParam[$value[1]];
if(preg_match("/^[a-zA-Z]+$/", $str)) {
//$this->arrErr[$value[1]] = "※ " . $value[0] . "${0}は${1}を含む${2}文字以上を入力してください。
";
$this->arrErr[$value[1]] = SC_Utils_Ex::sfGetMessage (VALIDATION_COMMON_STRING_NOTCONTAIN, array($value[0],'半角英字或るは半角数字',1));
} else if (preg_match("/^[0-9]+$/", $str)) {
//$this->arrErr[$value[1]] = "※ " . $value[0] . "${0}は${1}を含む${2}文字以上を入力してください。
";
$this->arrErr[$value[1]] = SC_Utils_Ex::sfGetMessage (VALIDATION_COMMON_STRING_NOTCONTAIN, array($value[0],'半角英字或るは半角数字',1));
} else if (!preg_match("/^[0-9a-zA-Z]+$/", $str)) {
//$this->arrErr[$value[1]] = "※ " . $value[0] . "${0}は${1}を含む${2}文字以上を入力してください。
";
$this->arrErr[$value[1]] = SC_Utils_Ex::sfGetMessage (VALIDATION_COMMON_STRING_NOTCONTAIN, array($value[0],'半角英字或るは半角数字',1));
}
}
/**
* 半角英数字のチェック
*
* @param $value
* [0]: 項目名
* [1]: value
*/
function EC_HALF_ENG_AND_NUM_CHECK($value) {
if(isset($this->arrErr[$value[1]])) {
return;
}
$this->createParam($value);
if( strlen($this->arrParam[$value[1]]) > 0 && !preg_match("/^[0-9a-zA-Z]+$/", $this->arrParam[$value[1]])) {
//$this->arrErr[$value[1]] = "※ " . $value[0] . "は半角英数字で入力してください。
";
$this->arrErr[$value[1]] = SC_Utils_Ex::sfGetMessage(VALIDATION_STRING_TYPE_ALNUM, $value[0]);
}
}
/**
* 半角英数カナのチェック
*
* @param $value
* [0]: 項目名
* [1]: value
*/
function EC_HALF_ENG_NUM_KANA_CHECK($value) {
if(isset($this->arrErr[$value[1]])) {
return;
}
$this->createParam($value);
if( strlen($this->arrParam[$value[1]]) > 0 && !preg_match("/^[0-9a-zA-Zァ-ヶヲ-゚ー]+$/u", $this->arrParam[$value[1]])) {
//$this->arrErr[$value[1]] = "※ " . $value[0] . "は半角英数カナ文字を入力してください。
";
$this->arrErr[$value[1]] = SC_Utils_Ex::sfGetMessage(VALIDATION_STRING_TYPE_HANKAKUKANA_ALNUM, $value[0]);
}
}
/**
* メールアドレス形式の判定
*
* @param array $value 各要素は以下の通り。
* [0]: 項目名
* [1]: 判定対象を格納している配列キー
* @return void
*/
function EC_EMAIL_CHECK( $value ){
if(isset($this->arrErr[$value[1]])) {
return;
}
$this->createParam($value);
// 入力がない場合処理しない
if (strlen($this->arrParam[$value[1]]) === 0) {
return;
}
$wsp = '[\x20\x09]';
$vchar = '[\x21-\x7e]';
$quoted_pair = "\\\\(?:$vchar|$wsp)";
$qtext = '[\x21\x23-\x5b\x5d-\x7e]';
$qcontent = "(?:$qtext|$quoted_pair)";
$quoted_string = "\"$qcontent*\"";
$atext = '[a-zA-Z0-9!#$%&\'*+\-\/\=?^_`{|}~]';
$dot_atom_text = "$atext+(?:[.]$atext+)*";
$dot_atom = $dot_atom_text;
$local_part = "(?:$dot_atom|$quoted_string)";
$domain = $dot_atom;
$addr_spec = "${local_part}[@]$domain";
$dot_atom_loose = "$atext+(?:[.]|$atext)*";
$local_part_loose = "(?:$dot_atom_loose|$quoted_string)";
$addr_spec_loose = "${local_part_loose}[@]$domain";
if (RFC_COMPLIANT_EMAIL_CHECK) {
$regexp = "/\A${addr_spec}\z/";
} else {
// 携帯メールアドレス用に、..や.@を許容する。
$regexp = "/\A${addr_spec_loose}\z/";
}
if (!preg_match($regexp, $this->arrParam[$value[1]])) {
//$this->arrErr[$value[1]] = "※ " . $value[0] . "の形式が不正です。
";
$this->arrErr[$value[1]] = SC_Utils_Ex::sfGetMessage(VALIDATION_STRING_FORMATINVALID, $value[0]);
return;
}
// 最大文字数制限の判定 (#871)
$arrValueTemp = $value;
$arrValueTemp[2] = 256;
$this->MAX_LENGTH_CHECK($arrValueTemp);
}