2

我的正则表达式知识不是最好的,虽然我一直在查看帖子以了解它,但我无法找到我正在寻找的东西。

我想使用以下内容(其中 $postcode 是用户输入的完整邮政编码):

if(preg_match("AREA CODE REGEX GOES HERE", $postcode))
{
    //Do something   
}

执行以下操作:

检查输入的邮政编码区号与以下 DN15,16,17,18,19,20,21,22,31,32,33,34,35,36,37,38,39,40,41 之一(所有DN)。

所以我正在寻找只匹配那些邮政编码的正则表达式。例如,它可以是 DN21 1AB 或 DN21 2AB,但它必须与 DN21 的第一部分仍然匹配。

我希望这是足够的信息,并提前感谢您的帮助。

4

2 回答 2

11

试试这个由英国政府自己提供的正则表达式模式:

(GIR 0AA)|((([A-Z-[QVX]][0-9][0-9]?)|(([A-Z-[QVX]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVX]][0-9][A-HJKSTUW])|([A-Z-[QVX]][A-Z-[IJZ]][0-9][ABEHMNPRVWXY])))) [0-9][A-Z-[CIKMOV]]{2})

因此,要将其应用于您的情况,您可以首先检查您是否处理的是有效的英国邮政编码,然后检查第一部分是否以“DN”开头,第二部分是否是接受范围内的任何一个 -数字数组:

$accepted_numbers = array_merge(range(15, 22), range(31, 41));

if (preg_match('#^(GIR ?0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]([0-9ABEHMNPRV-Y])?)|[0-9][A-HJKPS-UW]) ?[0-9][ABD-HJLNP-UW-Z]{2})$#', $postcode) && substr($postcode, 0, 2) == 'DN' && in_array(substr($postcode, 2, 2), $accepted_numbers)) {
       // The UK post code is valid according to your criteria
}

资料来源: http://webarchive.nationalarchives.gov.uk/+/http: //www.cabinetoffice.gov.uk/media/254290/GDS%20Catalogue%20Vol%202.pdf(第 11 页)

于 2013-02-18T11:18:47.090 回答
0

如果您只想匹配 DN15-DN41,因为我认为这就是“仅匹配那些邮政编码”的意思,您可以使用:

if(preg_match("/^DN(1[5-9]|[23][0-9]|4[01])/", $postcode))
{
    //Do something   
}
于 2013-02-18T11:29:35.287 回答