2013-07-24 5 views
1

Ненавижу этот код. То, что он делает, это взять zipcode с html-страниц, проверяет, является ли почтовый индекс США или Канадой.Regex, чтобы соответствовать любому одному алфавиту в строке 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"; 
     } 

?> 

Я попробовал очень нужно было найти решение для этого. Но я не могу найти решение. Я даже пробовал регулярное выражение, что он должен содержать только Numbers, а не один алфавит. Но это никоим образом не работает. Почтовый индекс указан в этом формате,

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

Просьба помочь мне с этим решением. Спасибо

+3

'Ненавижу этот код' ИЛИ' У меня есть этот код' ????? –

+1

Zipcodes могут начинаться с 0, проверять северо-восток – DevZer0

+1

@EmmaWatson: проверить 'DOMDocument', это лучший способ получить нужный вам узел DOM и его значение –

ответ

1

Поскольку может быть только один элемент с определенным ID, вам не нужно использовать preg_match_all(), вы можете использовать preg_match().

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

Тогда вам не нужно использовать implode(). Часть, которая соответствует группе захвата, будет находиться в элементе 1 массива match.

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

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

Спасибо, что помогли мне. Большое большое спасибо :) –

Смежные вопросы