PHP Check PostCode è nell'elenco
-
12-12-2019 - |
Domanda
Ho un elenco di aree codice postale (solo parte sinistra solo) come sotto:
IV1-28,IV30-32,IV36,IV40-49,IV52-56,IV63,KW1-3,KW5-14,PA21-38,PH1-26,PH30-41,PH49-50,LD1-99,SY16-20,SY23-25
.
Il mio input è un codice postale del Regno Unito ad esempio.IV21
Ho bisogno di una funzione PHP per verificare se il codice postale di input (ad es. IV21) è nell'elenco.
Questo sarebbe abbastanza semplice, ma l'elenco è nel modulo IV1-28 al contrario di essere una lista "normale" come IV1,IV2,IV3,IV4,IV5,IV6...IV26,IV27,IV28
ecc.
Aiuto è molto apprezzato.Grazie in anticipo.
Soluzione
Loop attraverso una serie di codici e si divide nel numero, quindi controlla se quel numero è compreso nell'intervallo
$list = array("IV1-28","AB1-10");
$found = false;
$input = "AB10";
$inputCode = substr($input,0,2);
$inputNumber = substr($input,2);
foreach ($list as $l)
{
$lCode = substr($l,0,2);
$lNumber = substr($l,2);
$listNumbers = explode("-",$lNumber);
if (($inputNumber >= $listNumbers[0]) && ($inputNumber <= $listNumbers[1]) && ($inputCode==$lCode))
{
$found = true;
break;
}
}
var_dump($found);
. Altri suggerimenti
http://php.net/manual/en/function.explode.php (per dividere il tuo elenco solo nel lato sinistro), aggiungere il lato sinistro in un array e utilizzare http://php.net/manual/en/function.in-array.php - dovrebbe prenderti da qualche parte vicino a ciò che hai bisogno
Usa la funzione Strpos.Restituisce Int se trovato o falso.Si noti che corrispondere a IV1 darebbe vero anche di IV11.Quindi usa il seguente script
$code="IV21";
$list="IV1-..........etc";
if(strpos($list,$code."-") || strpos($list,$code.",") {
//true
}
else {
//false
}
.
Il "-" e "," è quello di garantire che la stringa finisca in modo che IV11 non darà true se cerchiamo IV1