0

郵便番号を操作する関数を作成しようとしていますが、英国の郵便番号はすべて異なるサイズであるため、解決に苦労しているため、合格しようとすると(たとえば、「DN11AA」)、次のように返す必要があります。 dn | dn1-1 | dn1-1aa "

別の例は「B32B」を渡すことです-これは「b|b3-2|b3-2b」を返します

これをお読みいただきありがとうございます:)

4

2 に答える 2

3

英国の郵便番号を処理するための標準の正規表現コードがあります。

完全に包括的な表現は次のようになります。

(GIR 0AA)|(((A[BL]|B[ABDFHLNRSTX]?|C[ABFHMORTVW]|D[ADEGHLNTY]|E[HNX]?|F[KY]|G[LUY]?|H[ADGPRSUX]|I[GMPV]|JE|K[ATWY]|L[ADELNSU]?|M[EKL]?|N[EGNPRW]?|O[LX]|P[AEHLOR]|R[GHM]|S[AEGKLMNOPRSTY]?|T[ADFNQRSW]|UB|W[ADFNRSV]|YO|ZE)[1-9]?[0-9]|((E|N|NW|SE|SW|W)1|EC[1-4]|WC[12])[A-HJKMNPR-Y]|(SW|W)([2-9]|[1-9][0-9])|EC[1-9][0-9]) [0-9][ABD-HJLNP-UW-Z]{2})

これはPHPで次のように使用できます(簡潔にするために、上記のコードをと呼ばれる変数に入れたと仮定します$postcode_regex)。

$pc_is_valid = preg_match($postcode_regex, $input_string);

正確に何をしたいかによっては、他のpreg_xxx()関数を使用したり、上記の文字列を変更したりする必要があるかもしれませんが、詳細な情報がなければ、より明確なアドバイスを提供することは困難です。

郵便番号を解析する方法の詳細については、Wikipediaの記事を参照してください:http://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom

于 2012-09-01T11:59:59.973 に答える
1

これはうまくいくはずです。

function post($post){
 for($i = 0; $i < strlen($post); $i++)
    if(is_numeric(substr($post, $i, 1))){
       $j=$i;
       if(is_numeric(substr( $post, $i+2, 1)))$j++;          
       return substr($post, 0, $i).'|'.substr($post, 0, $j+1).'-'.substr($post, $j+1,1).'|'.substr($post, 0, $j+1).'-'.substr($post, $j+1);
    }

 } 

編集、テスト、動作

于 2012-09-01T12:11:20.950 に答える