2013-07-24 56 views
1

我讨厌这段代码。它所做的是从HTML页面获取邮政编码,验证邮政编码是美国还是加拿大。正则表达式匹配字符串中的任何单个字母表php

<?php 

$contents = file_get_contents('853755.html'); 

preg_match_all('/<td id="u_zipCode">(.*?)<\/td>/s', $contents, $matches); 

$data = implode("|",$matches[0]); 
$string = str_replace(' ', '', $data); 


if(preg_match('/^[1-9][0-9]*$/',$string)){ 
    echo "Canada"; 
    } 
    else 
    { 
     echo "USA"; 
     } 

?> 

我试过非常不得不为它搜索解决方案。但我找不到解决方案。我甚至试过它应该只包含数字而不是单个字母表的正则表达式。但是这似乎没有任何作用。邮政编码以这种格式给出,

USA: 97365 
USA: 97365-97366 
Canada: j8n7s1 
Canada: N2L5Y6 

请帮助我解决此问题。谢谢

+3

'我恨这个code'或者'我有这个code' ????? –

+1

邮政编码可以从0开始,检查东北 – DevZer0

+1

@EmmaWatson:检查DOMDocument,这是获取所需DOM节点的最佳方式及其值 –

回答

1

由于只能有一个具有特定ID的元素,因此不需要使用preg_match_all(),您可以使用preg_match()

preg_match('/<td id="u_zipCode">(.*?)<\/td>/s', $contents, $match); 

然后你不需要使用implode()。匹配捕获组的部分将位于match阵列的元素1中。

$string = str_replace(' ', '', $match[1]); 

if(preg_match('/^\d{5}(-\d{4})?$/',$string)) { 
    echo "USA"; 
} else { 
    echo "Canada"; 
} 
+0

非常感谢您帮助我。非常感谢 :) –