2013-09-16 3 views
0

Я нашел сценарий, который я использую, перестает работать, потому что «ereg» больше не поддерживается в php ... Я сам не писал этот скрипт, но не мог для жизни меня понять где поставить разделителей.Преобразование ereg в preg_match с разделителями

Я изменил «ereg» и «ereg_replace» на «preg_match» и «preg_replace» соответственно.

function checkPostcode($toCheck) { 



    $orig = $toCheck; 



    // Permitted letters depend upon their position in the postcode. 

    $alpha1 = "[abcdefghijklmnoprstuwyz]";       // Character 1 

    $alpha2 = "[abcdefghklmnopqrstuvwxy]";       // Character 2 

    $alpha3 = "[abcdefghjkstuw]";         // Character 3 

    $alpha4 = "[abehmnprvwxy]";          // Character 4 

    $alpha5 = "[abdefghjlnpqrstuwxyz]";        // Character 5 



    // Expression for postcodes: AN NAA, ANN NAA, AAN NAA, and AANN NAA 

    $pcexp[0] = '^('.$alpha1.'{1}'.$alpha2.'{0,1}[0-9]{1,2})([0-9]{1}'.$alpha5.'{2})$'; 



    // Expression for postcodes: ANA NAA 

    $pcexp[1] = '^('.$alpha1.'{1}[0-9]{1}'.$alpha3.'{1})([0-9]{1}'.$alpha5.'{2})$'; 



    // Expression for postcodes: AANA NAA 

    $pcexp[2] = '^('.$alpha1.'{1}'.$alpha2.'[0-9]{1}'.$alpha4.')([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})$'; 



    // Load up the string to check, converting into lowercase and removing spaces 

    $postcode = strtolower($toCheck); 

    $postcode = str_replace (' ', '', $postcode); 



    // 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_ma($regexp,$postcode, $matches)) { 



     // Load new postcode back into the form element 

     $toCheck = strtoupper ($matches[1] . ' ' . $matches [2]); 



     // Take account of the special BFPO c/o format 

     $toCheck = preg_replace ('C\/O', 'c/o ', $toCheck); 



     // Remember that we have found that the code is valid and break from loop 

     $valid = true; 

     break; 

    } 

    } 

Любая помощь была бы принята с благодарностью.

ответ

0

Разделители должны обертывать регулярные выражения, поэтому их необходимо разместить в $pcexp[0] и $pcexp[1].

0

Демиметры представляют собой пару символов в начале и конце строки шаблона регулярного выражения. Стандартный символ разделителя - /, но другие могут использоваться, если хотите.

Так, например:

'^(bfpo)([0-9]{1,4})$' 

должен быть изменен на:

'/^(bfpo)([0-9]{1,4})$/' 
^     ^
added this   and this 

Как вы видите выше, я добавил / в начале и в конце строки. Вы можете использовать # или ~ или другие символы для ваших разделителей, если хотите.

Обязательно избегайте появления символов разделителя внутри строки, или это будет рассматриваться как разделитель замыкания.

+0

Спасибо ... пробовал это, но выкидывал ошибки: Предупреждение: preg_replace(): разделитель не должен быть буквенно-цифровым или обратным слэшем –

+0

Учитывая сообщение об ошибке, которое вы получили, вы явно не сделали то, что я сказал, потому что он говорит, что вы используете письмо или обратную косую черту в качестве разделителя. Указатель, указанный мной, является * косой чертой *. – Spudley

+0

Я попытался добавить /, *, # –

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