2011-11-21 3 views
1

java에서 우편 번호의 유효성을 검사해야합니다. 내가 봤 거든 거기에 많은 정규식이 있습니다.우편 번호 패턴이 동적으로 변경되면 java에서 우편 번호의 유효성을 검사하는 방법은 무엇입니까?

문제는 내가 필요한 우편 번호 패턴이 일부 관리자 설정 페이지에서 변경 될 수 있다는 것입니다. 어떤 경우와 마찬가지로 사용자가 XXX - XXX 형식 또는 XXXXXX 형식으로 우편 번호를 입력해야 할 수도 있습니다.

경우에 따라 우편 번호는 숫자로만 구성된 경우도 있고 경우에 따라 영숫자로 구성 될 수도 있습니다.

도와주세요.

+0

관리자 설정 페이지를 통해 자신의 우편 번호 형식을 정의하거나 미리 정의 된 형식 목록에서 선택할 수 있기를 원하십니까? –

+0

@Ben van Gompel. 드롭 다운에 미리 정의 된 우편 번호 형식이 있습니다. – ashishjmeshram

+0

그래서 드롭 다운의 각 옵션에 대해 정규 표현식 (또는 유사한 것을 지정)을 지정하고 우편 번호의 확인에 올바른 옵션이 사용되는지 확인해야합니다. –

답변

1

우편 번호 (일명 우편 번호)를 포함하여 우편 주소에 대한 지역화 지원이 제대로되어 있지 않습니다. This blog post (약 1 년이지만 여전히 불행히도 관련이 있음)은 미안한 우편 주소 확인 상태를 나타냅니다. 미국의 경우 우편 서비스는 Address Validation API입니다. 웹 기반 프로토콜. 내가 아는 유일한 도구는 libaddressinput이라는 Android 라이브러리입니다. 프로젝트 요약에 따르면 UI가 Android에만 한정된 반면 백엔드는 다시 사용할 수 있다고합니다.

0

외부 도구가 없기 때문에 정규식을 사용하지 않고 우편 번호에 일부 패턴을 적용하는 코드는 다음과 같습니다. 서블릿에서 제공 한 패턴을 가질 수는 있지만 명확성을 위해 예제에 나와 있습니다.

public static boolean isProbablyValidUSZipCode(CharSequence zip) { 

    String[] patterns = {"#####", "#####-####", "##### ####", "#########"}; 
    try { 
     for (String pattern : patterns) { 
      if (checkAgainstPattern(zip, pattern)) { 
       return true; 
      } 
     } 
     return false; 
    } 
    catch (NullPointerException ignored) { 
     return false; 
    } 
} 

private static boolean checkAgainstPattern(CharSequence s, CharSequence pattern) { 

    if (s.length() != pattern.length()) { 
     return false; 
    } 

    for (int i = 0; i < pattern.length(); i++) { 
     char c = s.charAt(i); 
     switch (pattern.charAt(i)) { 
      case '#': 
       if (!Character.isDigit(c)) { 
        return false; 
       } 
       break; 

      default: 
       if (c != pattern.charAt(i)) { 
        return false; 
       } 
     } 
    } 
    return true; 
} 

영숫자를 허용하려면 당신이 Character.isLetterOrDigitCharacter.isDigit을 변경할 수 있습니다 : 귀하의 질문에 국가를 지정하지 않지만 그 패턴이 내게 잘 알고 있기 때문에

, 나는 미국 우편 번호 하나를 게시 할 예정입니다. 그러나 다른 나라들이 서로 다른 제약 조건을 가지고 있다면 추악해질 것입니다.

물론 이것은 존재하지 않거나 예약 된/그렇지 않은 경우 유효하지 않은 우편 번호를 찾기 위해 어떤 종류의 조회도하지 않지만 전혀 유효성 검사를하지 않는 것보다 낫습니다. 나중에 어떤 룩업 서비스를 찾으면, 나는 더 비쌀 것이라고 생각하기 때문에 항상이 정적 메소드들 이후에 호출 할 수 있습니다.