전화번호 하이픈 처리 질문입니다.
본문
레벨 오단계일경우에만
****처리된것을 보이게하기위해
마르스컴퍼니님 도움으로
<?php
for ($i=0; $i<count($list); $i++) {
if ($list[$i]['wr_6']) { // 전화번호 필드에 값이 있으면
if ($member['mb_level'] == 5) // 회원 레벨이 5 이면
$hp = $list[$i]['wr_6'];
else // 회원 레벨 5가 아니거나, 비회원이라면
$hp = substr($list[$i]['wr_6'], 0, -4) . "****";
$hp_hyphen = preg_replace("/(0(?:2|[0-9]{2}))([0-9]+)([0-9]{4}$)/", "\\1-\\2-\\3", $hp); // 하이픈 정규식 처리
}
이렇게 소스 수정을 해서 레벨 5단계회원경우에만 ****처리ㅏ된것을 볼수있게 수정하였습니다
그런데 하이픈처리가 레벨별 상관없이 다 먹지않고
오단계일때만 하이픈처리가 먹네요
전체레벨 모두 하이픈은 먹되
5단계에서만 ****처리된것을 보이게 하고싶은데요
저기서 조금만 수정하면될것같은데
수정이 어렵네요 도와주세요~!
답변 5
<?php
for ($i=0; $i<count($list); $i++) {
if ($list[$i]['wr_6']) { // 전화번호 필드에 값이 있으면
$hp = preg_replace("/(0(?:2|[0-9]{2}))([0-9]+)([0-9]{4}$)/", "\\1-\\2-\\3", $list[$i]['wr_6']); // 하이픈 정규식 처리
if ($member['mb_level'] != 5) $hp = substr($hp,0, -4) . "****";
}
이렇게 하시면 원하시는 값을 얻으실수 있을듯 합니다.
5단계가 아닐때 로직순서상 **** 로 먼저 바꿨고, 하이픈 처리는 그 뒤에 하는것인데
정규식에서 ****이 아닌, 숫자일때만 하이픈이 적용되도록 하고있기 때문입니다.
레벨 관계 없이 하이픈 처리를 먼저 하시면 됩니다.
$hp = preg_replace("/(0(?:2|[0-9]{2}))([0-9]+)([0-9]{4}$)/", "\\1-\\2-\\3", $list[$i]['wr_6']);
if ($member['mb_level'] == 5) // 회원 레벨이 5 이면
$hp_hyphen = $hp;
else // 회원 레벨 5가 아니거나, 비회원이라면
$hp_hyphen = substr($hp, 0, -4) . "****";
$hp_hyphen = preg_replace("/(0(?:2|[0-9]{2}))([0-9\*]+)([0-9]{4}$)/", "\\1-\\2-\\3", $hp); // 하이픈 정규식 처리
$list[$i]['wr_6'] = "공일공-1234-5678";
$member['mb_level'] = 1;
$hp = preg_replace("/(0(?:2|[0-9]{2}))([0-9]+)([0-9]{4}$)/", "\\1-\\2-\\3", $list[$i]['wr_6']);
if ($member['mb_level'] == 5) // 회원 레벨이 5 이면
$hp_hyphen = $hp;
else // 회원 레벨 5가 아니거나, 비회원이라면
$hp_hyphen = substr($hp, 0, -4) . "****";
echo $hp_hyphen;
exit;
$member['mb_level'] = 1; <- 레벨을 5로 했다가 다른것으로 바꾸며 테스트 해보니 잘 되는데요.
$list[$i]['wr_6'] = "공일공-1234-5678"; <- 이부분은 sir 게시판에 전화번호 노출이 안되서 공일공을 한글로 임의로 적은것이니 010 으로 변경해서 테스트 해보세요
$list 는 루프를 도는데,
$hp_hyphen 는 루프 도는동안 계속 덮어쓰고 있으니,
루프 안에서 출력하지 않는이상 루프 바깥에서 출력하게되면 마지막 루프값만 갖게 되는것이니 고것도 확인해보시구요