如果邮政编码模式动态变化,如何在java中验证邮政编码?
我需要用java验证邮政编码。我在谷歌上搜索过,有很多正则表达式 我遇到的问题是,某些管理员设置页面中所需的邮政编码模式可能会更改。就像在某些情况下,我们可能需要用户输入格式为XXX-XXX或XXXXXX等的邮政编码 在某些情况下,邮政编码只能由数字组成,在某些情况下,可以由字母数字组成如果邮政编码模式动态变化,如何在java中验证邮政编码?,java,validation,pattern-matching,zipcode,Java,Validation,Pattern Matching,Zipcode,我需要用java验证邮政编码。我在谷歌上搜索过,有很多正则表达式 我遇到的问题是,某些管理员设置页面中所需的邮政编码模式可能会更改。就像在某些情况下,我们可能需要用户输入格式为XXX-XXX或XXXXXX等的邮政编码 在某些情况下,邮政编码只能由数字组成,在某些情况下,可以由字母数字组成 请提供帮助。不幸的是,邮政地址(包括邮政编码)没有很好的本地化支持。大约一年前,但不幸的是,相关描述了令人遗憾的邮政地址验证状态。在美国,邮政服务提供他们的服务;基于web的协议。我所知道的唯一的另一个工具是A
请提供帮助。不幸的是,邮政地址(包括邮政编码)没有很好的本地化支持。大约一年前,但不幸的是,相关描述了令人遗憾的邮政地址验证状态。在美国,邮政服务提供他们的服务;基于web的协议。我所知道的唯一的另一个工具是Android库,名为。项目摘要说,虽然UI是特定于Android的,但后端可以重用。因为没有很好的工具,这里有一些代码可以在不使用正则表达式的情况下将一些模式应用于邮政编码。您可以使用servlet提供的模式,但为了清晰起见,示例中显示了这些模式 虽然您的问题没有指定国家,但我会为我们发布一个邮政编码,因为我对这些模式很熟悉:
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.isDigit更改为Character.isletorDigit。然而,如果不同的国家有不同的约束条件,情况就会变得糟糕
当然,这不会进行任何类型的查找来捕获不存在或以某种方式被保留/以其他方式无效的邮政编码,但这可能比根本不进行验证要好。如果您以后找到了一些查找服务,您可以在这些静态方法之后调用它,因为我认为这样会更昂贵 您想通过“管理设置”页面定义自己的邮政编码格式还是从预定义格式列表中进行选择?@Ben van Gompel。我们将在下拉列表中提供一些预定义的邮政编码格式。因此,您需要为下拉列表中的每个选项指定一个正则表达式或类似的格式,并确保使用正确的格式来验证邮政编码。可能重复