我们有一个正在处理和验证的正则表达式
丹麦语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,}。
非常感谢
答案 0 :(得分:2)
我认为^[NG]?\d{4}|S\d{5}|(FO-)?\d{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";
}
该方法应该可以用于任何语言。