php - 特定英国邮政编码区号所需的 preg_match 正则表达式

标签 php regex preg-match

我的正则表达式知识不是最好的,尽管我一直在浏览帖子以了解它,但我找不到我要找的东西。

我想使用以下内容(其中 $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 的第一部分仍然匹配。

我希望这些信息足够了,在此先感谢您的帮助。

最佳答案

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

(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 页)

关于php - 特定英国邮政编码区号所需的 preg_match 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14935013/

相关文章:

php - Phalcon ODM 批量删除

PHP foreach 在每个级别嵌套具有可变元素的列表?

Java正则表达式匹配逗号分隔的接口(interface)列表

c# - 在 C# 中获取部分字符串的正则表达式模式或算法

PHP 检查字符串是否包含不带 http 的 url ://

php - 如何从js代码中获取字符串值

php - mysql_fetch_row 和 mysql_fetch_array 之间的冲突

php - 在 codeigniter 中进行多个查询,结果基于第一个查询

regex - 从 R 中的模型公式中删除包装在函数中的变量

php - 字符串匹配