Posta kodu Uzay

5 Cevap

Ben başarısız olur değilse, içinde bir boşluk var posta kodu girişi gerektiren bir komut dosyası var. PHP kullanarak doğru biçimde girilen hiçbir boşluk varsa yalındır, ama Birleşik Krallık posta kodları farklı yerlerde boşluklar var olabilir, yani W1 4SB, NW2 6PT veya SG14 1LB nasıl, kullanıcıların girişini değiştirmek istiyorsunuz?

5 Cevap

Çalıştı çözümdür:

$postcode = trim(strip_tags($_REQUEST['postcode']));
$test = $postcode;
if(substr($test, -3) == " ") {
  $postcode = $postcode; 
  } 
  else {
  function stringrpl($x,$r,$str)
	{
	$out = "";
	$temp = substr($str,$x);
	$out = substr_replace($str,"$r",$x);
	$out .= $temp;
	return $out;
	}

	$test = stringrpl(-3," ",$test);
$postcode = $test;
  }

Postcodes always end with digit-letter-letter. Basitçe dizenin sonundan önce 4 karakterde bir yer aramak ve orada değilse, onu takın.

Alanı tamamen nitelikli Birleşik Krallık posta kodları için her zaman aynı pozisyonda aslında. Sadece son 3 rakam / harf önce olduğunu

Bu yüzden ilk önce gerçek bir İngiliz posta kodu ve daha sonra bunu yapmak, biçimini eşleştiğini doğrulamak:

$postcode = 'E154EZ';
if( isValidPostcode($postcode) ){
  $postcode = str_replace(' ','',$postcode);
  $postcode = wordwrap($postcode, strlen($postcode)-3,' ', true);
}

PS. Sen here gelen İngiltere Posta kodu doğrulama regexes + ekstra bilgi alabilirsiniz

Bu (sizin örneklere dayanarak) aynı yerde her zaman, bu yapabilirdi:

<?php
//...assuming postalcode has already been loaded into $postalcode...

//If the fourth-to-last char isn't a space, add one in that position
if (substr($postalcode, -4, 1) != " ") {
    $postalcode = substr($postalcode, 0, strlen($postalcode) - 3) + 
                  " " + substr($postalcode, -3);
}

//do whatever with $postalcode you'd normally do...
?>

Muhtemelen bir dakika uzunluk, vb Ama bu olacak almak gerektiği gibi, biraz daha etrafında kontrol yapmak istiyorum.

İlk irade geçerli posta kodunun altında fonksiyon, eğer geçerli değil, false döndürür. geçerli, eğer outcode ve InCode arasındaki boşluk bir posta kodu dönecektir olursa olsun, bunu alan veya bir posta kodu verir.

function checkPostcode (&$toCheck) {
  // Permitted letters depend upon their position in the postcode.
  $alpha1 = "[abcdefghijklmnoprstuwyz]";                          // Character 1
  $alpha2 = "[abcdefghklmnopqrstuvwxy]";                          // Character 2
  $alpha3 = "[abcdefghjkpmnrstuvwxy]";                            // Character 3
  $alpha4 = "[abehmnprvwxy]";                                     // Character 4
  $alpha5 = "[abdefghjlnpqrstuwxyz]";                             // Character 5

  // Expression for postcodes: AN NAA, ANN NAA, AAN NAA, and AANN NAA with a space
  $pcexp[0] = '^('.$alpha1.'{1}'.$alpha2.'{0,1}[0-9]{1,2})([[:space:]]{0,})([0-9]{1}'.$alpha5.'{2})$';

  // Expression for postcodes: ANA NAA
  $pcexp[1] =  '^('.$alpha1.'{1}[0-9]{1}'.$alpha3.'{1})([[:space:]]{0,})([0-9]{1}'.$alpha5.'{2})$';

  // Expression for postcodes: AANA NAA
  $pcexp[2] =  '^('.$alpha1.'{1}'.$alpha2.'{1}[0-9]{1}'.$alpha4.')([[:space:]]{0,})([0-9]{1}'.$alpha5.'{2})$';

  // Exception for the special postcode GIR 0AA
  $pcexp[3] =  '^(gir)(0aa)$';

  // Standard BFPO numbers
  $pcexp[4] = '^(bfpo)([0-9]{1,4})$';

  // c/o BFPO numbers
  $pcexp[5] = '^(bfpo)(c\/o[0-9]{1,3})$';

  // Overseas Territories
  $pcexp[6] = '^([a-z]{4})(1zz)$/i';

  // Load up the string to check, converting into lowercase
  $postcode = strtolower($toCheck);

  // Assume we are not going to find a valid postcode
  $valid = false;

  // Check the string against the six types of postcodes
  foreach ($pcexp as $regexp) {

    if (ereg($regexp,$postcode, $matches)) {

      // Load new postcode back into the form element  
          $postcode = strtoupper ($matches[1] . ' ' . $matches [3]);

      // Take account of the special BFPO c/o format
      $postcode = ereg_replace ('C\/O', 'c/o ', $postcode);

      // Remember that we have found that the code is valid and break from loop
      $valid = true;
      break;
    }
  }

  // Return with the reformatted valid postcode in uppercase if the postcode was 
  // valid
  if ($valid){
      $toCheck = $postcode; 
        return true;
    } 
    else return false;
}