全角转半角
Code
/**
* 全角を半角にする
* @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;
}
半角判断
/**
* 引数の文字列が全て半角文字であるかチェックする
*/
function is_half($instr) {
$flag = FALSE; //直前文字が全角カタカナならTRUE
$len = mb_strlen($instr);
$ofst = 1;
$outstr = '';
for ($ofst = 0; $ofst < $len; $ofst++) {
$ch = mb_substr($instr, $ofst, 1);
if (mb_ereg('^[ア-ン゙゚ヲー]+$', $ch)) {
$flag = TRUE;
} else if (mb_ereg('^[a-zA-Z0-9]+$', $ch)) {
$flag = TRUE;
} else {
$flag = false;
}
if($flag == false) break;
}
return $flag;
}
Code
function is_half($instr) {
$flag = FALSE; //直前文字が全角カタカナならTRUE
$len = mb_strlen($instr);
$ofst = 1;
$symbol = '\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\{\|\}\~';
for ($ofst = 0; $ofst < $len; $ofst++) {
$ch = mb_substr($instr, $ofst, 1);
if (mb_ereg('^[ア-ン゙゚ヲー]+$', $ch)) {
$flag = TRUE;
} else if (mb_ereg('^[a-zA-Z0-9]+$', $ch)) {
$flag = TRUE;
} else if (inStr($ch, $symbol)) {
$flag = TRUE;
} else {
$flag = false;
}
if($flag == false) break;
}
return $flag;
}
例子
https://files.cnblogs.com/sekihin/convert_kana.rar
JS全角转半角
https://files.cnblogs.com/sekihin/convertKana.rar