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」で始まり、2 番目の部分が受け入れられた範囲のいずれかであるかどうかを確認できます。数値配列:

$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 に答える