Java - 英国邮政编码 validator 到美国邮政编码 validator

标签 java regex validation netbeans

我想知道如何将我的英国邮政编码 validator 变成美国邮政编码 validator 。目前,我的程序从文本文件中读取邮政编码并验证它们是否是有效的英国邮政编码。这很好用,但我也想阅读美国邮政编码而不是英国邮政编码,然后验证它们。以下是我当前的程序。

package postcodesort;

import java.util.*;
import java.util.Queue;
import java.util.TreeSet;
import java.io.File;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedList;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;




public class PostCodeSort 
{
Queue<String> postcodeStack = new LinkedList<String>();

public static void main(String[] args) throws IOException 
{
    FileReader fileReader = null;
    ZipCodeValidator zipCodeValidator = new ZipCodeValidator();

    // Create the FileReader object
    try {
        fileReader = new FileReader("usvalidcodes.txt");
        BufferedReader br = new BufferedReader(fileReader);

        String str;
        while((str = br.readLine()) != null) 
        {
            if(zipCodeValidator.isValid(str)){
                System.out.println(str + " is valid");
            }
            else{
                System.out.println(str + " is not valid");
            }
        }
    }

    catch (IOException ex) 
    {
        // handle exception;
    }

    finally 
    {
        fileReader.close();
    }

}
}

这是通过正则表达式进行验证的代码部分。

package postcodesort;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
*
* @author ec1312017
*/
public class ZipCodeValidator {
private static String regex = "^[A-Z]{1,2}[0-9R][0-9A-Z]? [0-9][ABD-HJLNP-UW-Z]{2}$";
private static Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

public boolean isValid(String zipCode) {
    Matcher matcher = pattern.matcher(zipCode);
    return matcher.matches();
}
}

我还在要读入的文本文件中包含了一小部分数据。

"01","35005","AL","亚当斯维尔",86.959727,33.588437,10616,0.002627

"05","72001","AR","ADONA",92.903325,35.046956,494,0.00021

"06","90804","CA","信号山",118.155187,33.782993,36092,0.001213

感谢您的帮助,如有任何问题,请随时提出。

最佳答案

一个简单的解决方案是更改正则表达式。这个问题regex for zip-code建议正则表达式应为 ^\d{5}(?:[-\s]\d{4})?$

所以类看起来像这样:

public class ZipCodeValidator {

private static String regex = "^\d{5}(?:[-\s]\d{4})?$";
private static Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);


public boolean isValid(String zipCode) {
    Matcher matcher = pattern.matcher(zipCode);
    return matcher.matches();
}
}

这不会根据您提供的 zipcoes 列表进行验证,但实现起来要简单得多:)

关于Java - 英国邮政编码 validator 到美国邮政编码 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37663138/

相关文章:

regex - 如何使用 Angular 5 Validator Pattern 验证密码强度

java - 安卓 Java : getText can't read superscript font

java - 将大型 Java 应用程序从 MyBatis 迁移到 ORM

c# - 使用 C# 正则表达式使用 SSIS 脚本匹配以 "case"开头的 ID

regex - Scala 中使用正则表达式仅提取第一个匹配项

validation - JSF 2.0;验证器标签 "disabled"取决于页面中的值

javascript - 从表单获取值的困难

java - Terracotta 是分布式缓存吗?

java - 是否可以配置 Dozer,以便默认情况下直接访问字段而不是通过 setter-/getter 方法

javascript - 尝试更改 onchange 中的所有数字 - onchange.replace 不起作用?