2012-02-14 3 views
0

Here is the list; 좀 더 쉽게 조회 할 수 있도록 데이터 주소 세트를 "정상화"하려고합니다.미국의 거리 및 보조 약어를 전체 길이 버전으로 번역

strtr()과 을 사용해 보았지만 제대로 작동하지 않았습니다. 다음은 테스트를위한 짧은 목록입니다.

<?php 
function street_abbreviations_regex($input) { 
    $list = array(
    ' ave' => ' avenue', 
    ' blvd' => ' boulevard', 
    ' cir' => ' circle', 
    ' ct' => ' court', 
    ' expy' => ' expressway', 
    ' fwy' => ' freeway', 
    ' ln' => ' lane', 
    ' pky' => ' parkway', 
    ' rd' => ' road', 
    ' sq' => ' square', 
    ' st' => ' street', 
    ' tpke' => ' turnpike', 
    ' n' => ' north', 
    ' e' => ' east', 
    ' s' => ' south', 
    ' w' => ' west', 
    ' ne' => ' northeast', 
    ' se' => ' southeast', 
    ' sw' => ' southwest', 
    ' nw' => ' northwest', 
); 
// $input = strtr(strtolower($input), $list); 
    $input = str_ireplace(array_keys($list), array_values($list), strtolower($input)); 
    $regex_street = (preg_replace("/[^A-Za-z0-9]/", "", $input)); 
    return $regex_street; 
?> 

입력 strtr에서

echo street_abbreviations_regex('10 E Union St.') . " <br>\n"; 
echo street_abbreviations_regex('10 E Union Street') . " <br>\n"; 

출력() 우리는 주소를하는 곳 나는 회사에서 일

10eastunionsouthtreet 
10eastunionsouthtreetreet 
+0

구체적으로 어떤 문제가 있습니까? 원하는 출력은 무엇입니까? – Charles

+0

출력 문자열은 동일한 주소 여야하므로 동일해야합니다. – mikeytown2

+0

좋은 출발을 찾았습니다 : https://github.com/jhubert/normalize-us-street-address – mikeytown2

답변

1

SmartyStreets라고 str_ireplace()에서

10eastunionsoutht 
10eastunionsouthtreet 

출력 파싱 , 표준화 등 ... 당신이하려는 일은 실제로 엄청나게 복잡하다고 말할 것입니다. 나는 경험에서 압니다!

정규 표현식보다 우선하는 모든 유형의 입력 (유효하거나 유효하지 않은)을 나열하는 대신 주소가 다양한 형식과 크기로 제공된다는 사실을 믿으십시오. 출력을 정확하게 표준화하는 것은 쉽지 않습니다.

USPS는 공인 데이터를 사용하여 주소 정규화를 수행 할 수있는 소수의 공급 업체를 인증했습니다. CASS 인증 서비스를 살펴보십시오. LiveAddress API (무료)으로 검색을 시작할 수 있습니다. LiveAddress가 PHP parses natively으로 JSON 문자열을 반환하기 때문에 PHP에서 사용하기가 정말 쉽습니다.

더 궁금한 점이 있으면 직접 답변 해 드리겠습니다.