2013-11-28 5 views
-1

내가 PHP에서이를 달성 할 수있는 방법을 찾고 있어요 ... ,이 웹 사이트 지침에 따라 http://www.braemoor.co.uk/software/postcodes.shtml하지만 거기에 자바 스크립트 메서드의 데모를 필요로하는 PHP 함수를 호출하는 방법에 대한 지침이 없습니다.PHP 버전 자바 스크립트 함수 (우편 번호 확인)

현재 코드는 javascript이며, 최근에야 내 자바 스크립트 기능을 매우 쉽게 우회 할 수 있다는 것을 발견했습니다. 그래서 지금은 같은,하지만 serverside을 달성하기 위해 PHP를 찾고 있습니다.

+0

이 코드가하는 주요한 일은'document.getElementById'입니다. 이것은 PHP에 전혀 적용되지 않습니다. "이 코드"의 PHP 버전을 만드는 데있어서 정확히 당신의 문제는 무엇입니까? – deceze

+0

Javascript 유효성 검사는 UX의 문제입니다. 서버 측 유효성 검사 만이 유일한 유효성 검사입니다. 불행하게도, 위의 코드에서 우리가 볼 수있는 유효성 검사 규칙은 없습니다 ... –

+0

저는 자신의 스크립트를 작성하는 데 충분한 자신감을 갖고 있지 않아서 왜 다른 사람들의 스크립트를 사용하고 웹 사이트는 제공된 스크립트 만 제공합니까? 나 자바 스크립트 버전에 대한 정보와 함께,하지만 나중에 스크립트가 작성되었습니다 serveride 유효성 검사가 필요하다는 것을 깨달았지만, 그것을 구현할 수 없습니다 메신저 Barmar의 솔루션은 내가 지금 더 나에게 의미를 찾고 무엇 메신저입니다. – user3046399

답변

0
<?php 
/*============================================================================== 
Application: Utility Function 
Author:  John Gardner 

Version:  V1.0 
Date:   25th December 2004 
Description: Used to check the validity of a UK postcode 

Version:  V2.0 
Date:   8th March 2005 
Description: BFPO postcodes implemented. 
       The rules concerning which alphabetic characters are alllowed in 
       which part of the postcode were more stringently implementd. 

Version:  V3.0 
Date:   8th August 2005 
Description: Support for Overseas Territories added    

Version:  V3.1 
Date:   23rd March 2008 
Description: Problem corrected whereby valid postcode not returned, and 
          'BD23 DX' was invalidly treated as 'BD2 3DX' (thanks Peter 
       Graves)    

Version:  V4.0 
Date:   7th October 2009 
Description: Character 3 extended to allow 'pmnrvxy' (thanks to Jaco de Groot)   

Version:  V4.1 
Date:   8th Septemeber 2011 
Description: ereg and ereg_replace replaced with preg_match and preg_replace 
       BFPO support improved 
       Add check for Anquilla 

Version:  V5.0 
Date:   8th November 2012 
       Specific support added for new BFPO postcodes 

Parameters: $postcode - postcode to be checked. This is returned reformatted 
       if valid. 

This function checks the value of the parameter for a valid postcode format. The 
space between the inward part and the outward part is optional, although is 
inserted if not there as it is part of the official postcode. 

The functions returns a value of false if the postcode is in an invalid format, 
and a value of true if it is in a valid format. If the postcode is valid, the 
parameter is loaded up with the postcode in capitals, and a space between the 
outward and the inward code to conform to the correct format. 

Example call: 

    if (!checkPostcode ($postcode)) { 
     echo 'Invalid postcode <br>'; 
    } 

------------------------------------------------------------------------------*/ 
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 
    $BFPOa5 = "[abdefghjlnpqrst]{1}";        // BFPO character 5 
    $BFPOa6 = "[abdefghjlnpqrstuwzyz]{1}";       // BFPO character 6 

    // Expression for BF1 type postcodes 
    $pcexp[0] = '/^(bf1)([[:space:]]{0,})([0-9]{1}' . $BFPOa5 . $BFPOa6 .')$/'; 

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

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

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

    // Exception for the special postcode GIR 0AA 
    $pcexp[4] = '/^(gir)([[:space:]]{0,})(0aa)$/'; 

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

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

    // Overseas Territories 
    $pcexp[7] = '/^([a-z]{4})([[:space:]]{0,})(1zz)$/'; 

    // Anquilla 
    $pcexp[8] = '/^ai-2640$/'; 

    // 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 (preg_match($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 = preg_replace ('/C\/O([[:space:]]{0,})/', 'c/o ', $postcode); 

     // Take acount of special Anquilla postcode format (a pain, but that's the way it is) 
     if (preg_match($pcexp[7],strtolower($toCheck), $matches)) $postcode = 'AI-2640';  

     // 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; 
} 
?> 
1
$newPostCode = checkPostCode($_POST['Postcode']); 
if ($newPostCode) { 
    // Do stuff with $newPostCode 
} else { 
    echo "Postcode has invalid format"; 
} 

당신은 여전히 ​​checkPostCode() 함수를 작성해야합니다.

+0

이 빠른 응답을 주셔서 감사합니다. 저는 이미 원래 게시물에 나열된 웹 사이트에서 checkpostcode 함수를 얻었습니다. 내 PHP 능력은 스크립트를 쓰는 것만으로도 여전히 나를 위협 할만큼의 수준입니다! – user3046399