개발 Q&A

제목 [정규표현식] 국제전화번호에서 국가코드 추출
글쓴이 이제다시 작성시각 2014/10/02 11:34:15
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 25299   RSS
ex) $phone = "0018221234567"; //001-82-2-123-4567 > 국가코드82

//국제전화번호가 입력된 상태에서 국가코드만 추출할 수 있을까요?

국가마다 국가번호가 상이하고 번호구조가 다르기때문에 추출하기가 너무 어렵내요.
미국
ex) $phone = "00112123244152"; //001-1-212-324-4152 > 국가코드1

해당주소록은 국제전화번호가 무조건들어가고 (001, 002, 008 , 00700) 등

국제전화번호 + 국가코드 + 지역번호 + 전화번호 순으로 붙어 있습니다.


 
 다음글 SQL 질문 (4)
 이전글 단어찾기질문요 (1)

댓글

들국화 / 2014/10/02 14:29:08 / 추천 0
아래 링크 참조 해 보세요.
어느정도 한두개라도 구분이 되어 있으면 읽어내기가 쉬울듯 한데요. 통으로 붙어있어서 힘들어 보이네요.
앞 국제전화번호가 유한하니 or 조건으로 리스트를 늘어놓고 국가코드도 or 조건으로 해서 매칭 하는게 좋을듯 합니다

http://regexlib.com/Search.aspx?k=phone number
이제다시 / 2014/10/06 10:20:52 / 추천 0
앞의 5자리를 자른후 국제번호 (001, 002, 00700) 등으로 비교하고
만약 001이라면 001 이후 국가코드는 4자까지 우선 4자리를 잘라서 매칭되는지 확인후
없으면 3자리 , 2자리 , 1자리 순으로 잘라서 매칭하는 방법으로 국가코드를 추출하기로 하였습니다.
 
$inter_no_array =  array("001", "002", "008", "00700");
$inter_no = substr($phone, 0, 5); //국제전화번호
        
for($i = 0 ; $i < count($inter_no_array); $i++){
    if(ereg($inter_no_array[$i] , $inter_no )){ //국제전화번호 비교
        $inter_ren = strlen($inter_no_array[$i]);
        break;
    }
}
        
for($j = 4; $j >= 1 ; $j--){
    $country_no = substr($phone, $inter_ren, $j); //국가번호를 잘러서 국가번호배열과 비교
    if(in_array($country_no, $country_no_array)){
        break;
    }
}
        
echo $country_no;

국가코드 뒤에 어떤 지역번호가 올지 몰라 잘못된 국가코드를 반환할 수도 있겠내요.
처음부터 구분되있는 구조가 아니라 완벽하게 추출하기는 조금 힘들거 같습니다.