0

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

反正你懂这个意思。

现在我需要在 FO-xxx 的图案上包含法罗岛邮政编码

我到目前为止所拥有的。

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

我编辑了 {2,5} 中的 {2,6} 和 {2,} 中的 {3,}。

非常感谢你

4

2 回答 2

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 个或更多非数字。这似乎不能满足您的要求(如上所述)。

于 2013-02-20T12:58:31.983 回答
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";
}

该方法应该可以在任何语言中使用。

于 2013-02-20T12:54:09.587 回答