1

我讨厌这段代码。它的作用是从 html 页面获取邮政编码,以验证邮政编码是美国还是加拿大。

<?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

请帮我解决这个问题。谢谢

4

1 回答 1

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";
}
于 2013-07-24T07:49:51.753 回答