我的正则表达式知识不是最好的,虽然我一直在浏览帖子以了解它我无法找到我正在寻找的东西。
我想使用以下内容(其中$ 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的第一部分。
我希望有足够的信息,并提前感谢您的帮助。
答案 0 :(得分:9)
试试英国政府自己提供的这种正则表达式:
(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
}
答案 1 :(得分:0)
如果您只想匹配DN15-DN41,因为我认为“只匹配那些邮政编码”意味着,您可以使用:
if(preg_match("/^DN(1[5-9]|[23][0-9]|4[01])/", $postcode))
{
//Do something
}