一个正则表达式,用于验证邮政编码无效

时间:2017-11-27 13:18:10

标签: java regex

以下正则表达式(请参阅代码段)将满足以下所有四个条件:

  • 12345
  • 12345-6789
  • 12345_6789
  • 12345 1234

我需要包含第5个条件,即123456789(因此,仅9个数字,没有空格)我试图将当前正则表达式更改为此^ [0-9] {5}(_ | - | \ s){0,1} | [0-9] {4}但这不起作用

public static boolean isZipCodeValid(String zipcode) {
    return zipcode.matches("^\\d{5}(?:[-_\\s]\\d{4})?$");
}

2 个答案:

答案 0 :(得分:0)

使用以下正则表达式:

^\\d{5}(?:[-_\\s]?\\d{4})?$

已经在https://regex101.com

上进行了测试

答案 1 :(得分:0)

尝试分解你的表达,应该更容易看到:

  1. 总是5位数(可能是第一位不是0),
  2. 一组4个数字,前面是空格或3个字符之一。
  3. 如果你将它转换为正则表达式,你应该得到类似的东西(我还包括非0的第一位数字):

    1. [1-9]\d{4}
    2. (x\d{4})? - 这是可选的?)组((...)),x是占位符。现在翻译"要么是3个字符,要么是#34;到表达式,你得到[-_ ]?。 (请注意,我将\s替换为空格,因为\s包含制表符和其他空格。
    3. 如果你把这一切都归结为[1-9]\d{4}([-_ ]?\d{4})?

      旁注:\d也匹配其他数字,例如阿拉伯语。您可能希望改为使用[0-9]