제목 | [정규표현식] 국제전화번호에서 국가코드 추출 | ||
---|---|---|---|
글쓴이 | 이제다시 | 작성시각 | 2014/10/02 11:34:15 |
|
|||
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
|
이제다시
/
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;국가코드 뒤에 어떤 지역번호가 올지 몰라 잘못된 국가코드를 반환할 수도 있겠내요. 처음부터 구분되있는 구조가 아니라 완벽하게 추출하기는 조금 힘들거 같습니다. |
어느정도 한두개라도 구분이 되어 있으면 읽어내기가 쉬울듯 한데요. 통으로 붙어있어서 힘들어 보이네요.
앞 국제전화번호가 유한하니 or 조건으로 리스트를 늘어놓고 국가코드도 or 조건으로 해서 매칭 하는게 좋을듯 합니다
http://regexlib.com/Search.aspx?k=phone number