正则表达式包括新的zipcodes

时间:2013-02-20 12:25:32

标签: regex

我们有一个正在处理和验证的正则表达式 丹麦语zipcodes:xxxx
挪威邮政编码:Nxxxx(内部自定义模式)
瑞典邮政编码:Sxxxxx(内部自定义模式)
格陵兰邮政编码:Gxxxx(内部自定义模式)
iceland zipcodes:xxx

嗯,你明白了。

现在我需要在FO-xxx模式上包含法罗岛邮政编码

我有什么安慰。

^(\D[0-9]{2,6}\s\D{3,})|([0-9]{3,6}\s\D{3,})$

我从{2,5}编辑了{2,6},从{2,}编辑了{3,}。

非常感谢

2 个答案:

答案 0 :(得分:2)

我认为^[NG]?\d{4}|S\d{5}|(FO-)?\d{3}$就足够了。

这允许以下任何一项:

  • 可选的N或G,后跟4个必填数字(匹配丹麦语,挪威语和格陵兰语)
  • 一个S后跟5位数(匹配瑞典语)
  • FO的可选部分 - 后跟3个必填数字(匹配冰岛和法罗群岛)

您的正则表达式^(\D[0-9]{2,6}\s\D{3,})|([0-9]{3,6}\s\D{3,})$符合以下模式:非数字后跟2-6位数字后跟空格后跟3位或更多位非数字 3 -6位数后跟一个空格,后跟3位或更多位非数字。这似乎不符合您的要求(如上所述)。

答案 1 :(得分:0)

我建议你为每个邮政编码制作一个简单的正则表达式,然后以编程方式将它们连接成一个正则表达式。这将比您现有的正则表达式执行更准确的检查。它也不会出错,也更容易维护。此外,如果您将来需要,它还可以为您提供额外的功能,例如匹配特定国家/地区的邮政编码。以下是我将如何在Perl中编写代码的示例:

use warnings;
use strict;

my %codes = (
    'Danish' => '\d{4}',
    'Norwegian' => 'N\d{4}',
    'Faroese' => 'FO-\d{3}'
);

my $zip_regex = '^' . join('|', values %codes) . '$';

if ($some_var =~ /$zip_regex/)
{
    print "$some_var is a zip code";
}

该方法应该可以用于任何语言。