2012-09-01 46 views
0

我试图创建一个函数,它操纵邮编,但作为在英国邮政编码都是不同的大小即时通讯努力工作,即时通讯尝试通过(例如“DN11AA” )这将需要返回以下内容:“dn | dn1-1 | dn1-1aa”如何创建一个PHP字符串条函数

另一个例子是传递“B32B” - 然后返回“b | b3-2 | b3-2b”

感谢您花时间阅读此:)

+0

什么是特定分裂的逻辑是什么? – deceze

+0

@deceze嗨,我正在创建一个在线位置应用程序,通过邮政编码搜索并返回信息。 – verheesj

+0

应该指出,英国邮政编码通常不用连字符书写。 – Spudley

回答

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); 
    } 

} 

编辑,测试工作

+0

感谢您的帮助,它近乎完美,目前输出“dn | dn1-5 | dn1-58aa” - 需要输出“dn | dn15-8 | dn15-8aa”。 – verheesj

+0

如果我通过函数发送以下值,则dn151bc,b144aa,b11j1,l691dt, , 输出:dn | dn1-5 | dn1-51bc,b | b1-4 | b1-44aa,b | b1-1 | b1-需要输出:dn | dn15-1 | dn15-1bc,b | b14-4 | b14-4aa,b | b1-1 | b1-1jl,l | 1n1 | ln1-2 | l69-1 | l69-1dt 希望有道理:) – verheesj

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()功能,并可能修改上面的字符串,但它很难没有更多的信息给予更明确的意见。

请参见维基百科的文章以获得更多关于如何解析邮政编码:http://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom

相关问题