#やりたかったこと
表題の通り。
「全角?半角?なんじゃらほい」というユーザーが想定される時に、全角で電話番号入力してもチェックを通過させるバリデーション。
#コード
function checkTel($str)
{
//全角を半角に
$str = mb_convert_kana($str,"a", "euc-jp");
//半角または全角のハイフンは取り除く
$str = mb_ereg_replace("-", "", $str);
$str = mb_ereg_replace("ー", "", $str);
$str = mb_ereg_replace("-", "", $str);
//数字であり、かつ10桁もしくは9桁かチェック
if(ctype_digit($str) AND (strlen($str) == 10 OR strlen($str)== 11)){
return TRUE;
} else {
return FALSE;
}
}
#捕捉
コメントいただき、修正しました。
str_replace ではなく mb_ereg_replace に
UTF-8でない文字コードだと、マルチバイトで文字化けするらしい。
参考
http://www.softel.co.jp/blogs/tech/archives/525
is_numeric ではなくctype_digit に
is_numeric だと16進数や化学記号も通過させちゃうようです。
参考
http://www.php.net/manual/ja/function.is-numeric.php
http://thesaibase.com/php/ctype-digit