라이믹스 회원정보에서 전화번호 지원을 하면서 국가번호 설정이 생겼더군요.

풍부해지긴 했는데 이것 때문에 서드파티에서 전화번호 출력하는 게 좀 까다로워졌습니다;;

 

물론 국내번호는 \Rhymix\Framework\Korea::formatPhoneNumber 라는 라이믹스 전용함수가 있어서 쉽게 변환이 됩니다.

국제번호로 표기할 때는

$phone_number = '+' . $logged_info->phone_country . '-' . substr(\Rhymix\Framework\Korea::formatPhoneNumber($logged_info->phone_number), 1);

이렇게 해줘야 하죠.

첫 자리의 0을 빼줘야 하니까요.

 

근데 이렇게 했을 때 <a href="tel:{$phone_number}">{$phone_number}</a>로 전화앱 연결을 해도 되나요?

왠지 001 같은 국제전화 서비스 번호를 앞에 또 붙여줘야 할 것 같은데요.

 

그리고 해외번호에서 이렇게 모두 공통으로 첫 자리 0을 빼주는 건 아니라고 합니다.

이탈리아, 바티칸, 산마리노 등에서는 첫 자리를 포함시켜줘야 한대요.

게다가 그런 식으로 전부 다써줘야 하는 나라들이 몇몇 더 있나봐요.

(출처 : 우리 시대 가장 화끈한 참고문헌 나무위키)

 

이럴 때 가장 합리적인 출력 방식은 뭘까요?

1. 전화번호 앱 연결 링크를 제공하지 않는다. (아쉽ㅜ)

2. +82-10-OOOO-OOOO 같은 식보다는 (+82) 010-OOOO-OOOO 으로 구분해서만 출력한다. (귀찮ㅜㅜ)

3. 국제번호를 사용하지 않는 경우에 한해서 국내번호에만 전화앱 링크를 출력한다. (피곤할 것 같음ㅠ)

4. 첫 자리를 생략하지 않는 나라를 어떻게든 찾아내서 완벽한 표기 방식으로 출력한다. (아, 생각만 해도 피곤ㅠㅠ)

 

질문 글로 올리려다가 하소연 같아서 토픽게시판에 올려봅니다 :)

윤삼

profile
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.
  • profile
    파이팅입니다. 도와드리지 못해 죄송. 이렇게 열과 성을 들여 개발하셔서 배포해 주시니 정말 감사하네요. ㅠㅠ
    (원문과 상관없는 댓글 죄송 ㅠㅠ)
  • profile profile

    그냥 하소연이니까요 뭐 하하하;;;

  • profile

    화면상에 표시할 때는 (+82) 010-1234-5678, (+1) 2345678900 과 같은 형태가 가장 직관적입니다. 한국 번호라면 한국식으로 '-'을 붙여 표기하고, 외국 번호는 실수로 엉뚱한 곳에 '-'이 들어가면 헷갈릴 수 있으니 그냥 숫자만 표시하세요. 특히 유럽 사람들은 '-' 없이 그냥 다 붙어 있는 것에 무척 익숙합니다. 나라마다 지역번호 자릿수가 제각각이어서 어디를 끊어야 할지 자기들도 모르거든요. ㅋㅋㅋ

     

    tel: 링크를 작성할 때는 '+'와 국가번호, 나머지 전화번호를 주르르 붙여서 넣으시면 됩니다. '+'를 붙이면 사용하는 통신사의 국제전화 발신코드를 자동으로 인식하기 때문에 001, 006 같은 것을 추가로 넣어줄 필요는 없습니다. 예: +821012345678

     

    문제 1) 작성하신 소스는 맨 앞자리가 0인지 아닌지 체크하지도 않고 무조건 한 자리를 빼버리기 때문에 미국이나 캐나다처럼 맨 앞에 0이 안 붙는 경우 문제가 생길 수 있습니다. preg_replace('/^0/', '', 번호) 추천합니다.

     

    문제 2) 국가번호에 '-'이 들어 있는 경우도 있습니다. 대개 이웃나라의 지역번호 하나를 할당받아서 쓰는 작은 섬나라들이 이런 신세인데요, 국가번호가 1-684 이렇게 나옵니다. 이런 경우 화면에 표시할 때는 (+1-684) 123-4567, tel: 링크에 넣을 때는 +16841234567이라고 하면 됩니다.

  • profile profile

    역시 신뢰를 주시는 말씀. 좋습니다!
    - 텍스트 표기는 (+국가번호) 국내번호로. 이때 1) 한국의 자국번호에는 하이픈 삽입, 2) 외국의 자국번호는 하이픈 없이 그대로
    - href 속성값은 '+'와 '숫자' 빼고 주르르르 방식으로.

    1) 그런데 국가번호 사용하는 경우는 1) 자국번호의 앞자리 '0'은 삭제. 2) 자국번호의 앞자리가 '0'이 아니면 존치

    2) 국가번호를 감추는 경우는 회원정보에 저장되어 있는 자국번호 그대로

  • profile profile
    앗, 근데 언급하신 미국 등으로부터 부속번호를 쓰는 나라들 국가번호도 회원정보에는 하이픈 없이 그냥 숫자 형태로만 저장되어 있는 모양입니다ㅜ
    '1-OOO'도 있고 '44-OOO' 있고 결국 정규식을 짜야 할 것 같은데요ㅜ
    회원정보에 국가번호 입력될 때는 굳이 숫자열만 담지 않아도 될 것 같아요.
  • profile profile

    무슨 이유가 있어서 그렇게 했던 것 같은데... 기억이 안 나네요.

    화면에 표시할 때만 하이픈을 넣어 주시면 되니, 국가번호가 4자리 이상인 경우 별도로 처리해 보세요.
    +1-○○○ (미국 인근 섬나라들), +7-○ (구소련), +44-○○○○ (과거 영국 식민지들),

    그 밖에 과거 프랑스 식민지나 정말 작고 가난한 나라들은 6~7자리에 달하는 경우도 몇 개 있는데
    가장 흔한 +1/7/44-만 제대로 처리해 주시면 나머지는 그냥 +6189164 이렇게 해도 상관없을 겁니다.
    어차피 그 부분 전체가 그 나라를 가리키는 것이어서 하이픈은 미관상의 의미가 있을 뿐이니까요.
     

    예전에는 같은 지역의 전화번호, 다른 지역의 전화번호, 다른 나라의 전화번호로 전화를 걸 때

    어디까지 포함할지 제대로 구분하지 않으면 연결이 되지 않거나 요금폭탄을 맞는 수가 있었지만

    tel: 링크를 클릭하는 것은 모두 모바일 기기이고, 요즘 나오는 모든 모바일 기기는 자신의 번호를 기준으로

    어디를 어떻게 끊어서 전화를 걸어야 할지 자동으로 판단하는 기능이 내장되어 있어서

    그냥 숫자만 잘 적어주시면 중간에 하이픈은 중요하지 않습니다.

  • profile profile
    회원정보 입력 보니까 미국(+1)과 영국(+44)만 부속번호를 공유하는 것 같구요.
    +7은 러시아랑 카자흐스탄이랑 같은 번호 쓰는 모양입니다.
    그래서 그냥 간단하게 preg_replace('/(^1|^44)/', '$1-', $logged_info->phone_country) 로 분리했습니다.
  • profile
    생각해 보니 이거 적당히 표시해 주는 함수가 코어에 들어가야 할 것 같기도 하네요...