ZIP code regex Java

ZIP code

ZIP code (US postal code) regular expression can be used to verify if a given string contains a valid ZIP code or extract ZIP code from a string. Supports both 5-digit and 9-digit (ZIP+4) formats.

ZIP code regex

A regular expression to test a string against ZIP code format:

Pattern.compile("^[0-9]{5}(?:-[0-9]{4})?$")

Test it!
/^[0-9]{5}(?:-[0-9]{4})?$/

True

False

Enter a text in the input above to see the result

Example code in Java:

import java.util.regex.Pattern;
import java.util.regex.MatchResult;
import java.util.Arrays;

public class Main {

    public static void main(String []args) {
        // Validate ZIP code
        boolean isMatch = Pattern.compile("^[0-9]{5}(?:-[0-9]{4})?$")
               .matcher("80001")
               .find(); 
        System.out.println(isMatch); // prints true
        
        // Extract ZIP code from a string
        String[] matches = Pattern.compile("[0-9]{5}(?:-[0-9]{4})?")
                          .matcher("My zip code is 80001")
                          .results()
                          .map(MatchResult::group)
                          .toArray(String[]::new);
        System.out.println(Arrays.toString(matches)); // prints [80001]
    }
}

Test it!

True

False

Enter a text in the input above to see the result

Test it!

True

False

Enter a text in the input above to see the result

Notes on ZIP code validation and extraction

This ZIP code regex has several limitations:

  • It only works for US ZIP codes. If you need to support other countries, you might need to have a separate regular expression for each one of them and execute it based on the country provided.
  • It can not guarantee that ZIP code actually exists. For instance, 99999 is a correct format, but this ZIP code does not exist.
  • The extraction method can generate false-positive extraction if a string contains multiple numbers.