2013-02-20 26 views
0

我们有一个正则表达式,将处理和验证
丹麦邮编:XXXX
挪威邮编:NXXXX(点播服务自定义模式)
瑞典邮编:Sxxxxx(点播服务自定义模式)
格陵兰邮编:Gxxxx (室内定制图案)
冰岛邮政编码:xxx正则表达式含新邮编

那么你明白了。

现在我需要包含在产品包装上FO-XXX

我有什么SOFAR格局法罗岛邮编。

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

我已经从{2,}从{2,5}和{3,...}的{2,6-}编辑。

非常感谢您

+0

目前,您的匹配结果包括具有至少3个字母(或者更确切地说:三无数字)一词的ZIP号码后。这是打算吗? – Matthias 2013-02-20 12:52:48

+0

x是一个数字,对不对? – 2013-02-20 12:56:37

+0

@NaveedS:是的,数字。 – DoStuffZ 2013-02-20 12:57:30

回答

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,})$像这样的图案:随后3个或更多的非数字或3-6数字后跟一个空格,随后3个或更多的非数字非数字后跟2-6数字后跟一个空格。这似乎不符合您的要求(如上所述)。

+0

看起来很有前途 - 当我尝试使用“FO-100 Test-FO100”(是的,我为Test-FO100创建了一个测试zip)时,它失败了。在我编辑了这个位之后:\ s \ D {3,} - 我在空间猜测+ 3个或更多的非数字。 – DoStuffZ 2013-02-20 13:28:00

+0

@DoStuffZ然后像''NG]?\ d {4} | S \ d {5} |(FO - )?\ d {3}'一样去掉锚点。锚点指示开始和结束。 – 2013-02-20 13:36:11

+0

非常感谢。我发誓正则表达式是魔鬼在一天中发明出来的东西。 – DoStuffZ 2013-02-20 13:48:43

0

我建议你为每个邮政编码一个简单的regex,然后它们连接在一起成一个正则表达式编程。这将执行比您现有的正则表达式更准确的检查。它也不太容易出错并且更容易维护。另外,如果您将来需要这些功能,它还可以帮助您完成额外工作,例如匹配特定国家/地区的邮政编码。下面是我如何在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"; 
} 

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

+0

唯一的问题是 - 它需要成为 DoStuffZ 2013-02-20 12:55:40

+0

@DoStuffZ的一部分,这种方法在ASP中可以正常工作。它只是从字符串值列表中创建正则表达式字符串,您可以用任何语言来完成。不过,我自己并不使用ASP,所以我无法提供具体细节。 – 2013-02-20 13:00:05