1

私のクラスには次の機能があります。

public function checkPostcodeFormat($postcode) {
    if (strlen($postcode) === 7 && substr($postcode, 5) !== " ") {
        return substr($postcode, 0, 4) . ' ' . substr($postcode, 4, 3);
    } elseif (strlen($postcode) === 6 && substr($postcode, 4) !== " ") {
        return substr($postcode, 0, 3) . ' ' . substr($postcode, 3, 3);
    } else {
        return $postcode;
    }
}

郵便番号が substr 関数を介して返された場合は問題ありませんが、else セクションで返された場合var_dump()は、間違った長さであることが示されます。

var_dump($_POST["postcode"]);

ショー

string(7) "ab1 1ab"

一方

var_dump($class->checkPostcodeFormat($_POST["postcode"]));

ショー

string(8) "ab1 1ab"

関数を介して返されるだけの場合、文字列が長くなる原因は何ですか?

4

3 に答える 3

2

$postcodeが の形式の場合ab1 1ab、最初のif条件が に評価され、そのブロックTRUE内のコードが実行されます。if上記の入力に対して、 substr($postcode, 5) 文字列を返しますab。したがって、substr($postcode, 5) !== " ")は常にTRUE郵便番号の長さと同じです7。そして、文字列を返すときにスペースを追加しているだけです。

文字列で作業する前に、すべてのスペースを削除することをお勧めします。以下のように機能を改善しました。

public function checkPostcodeFormat($postcode) {
    // remove all spaces in the post code
    $postcode = preg_replace('/\s+/', '', $postcode);

    if (strlen($postcode) === 6) {
        return substr($postcode, 0, 3).' '.substr($postcode, 3);
    } elseif (strlen($postcode) === 7) {
        return substr($postcode, 0, 4).' '.substr($postcode, 4);
    } 
}

テストケース:

var_dump( checkPostcodeFormat('AB11AB'));
var_dump( checkPostcodeFormat('AB121AB'));

出力:

string(7) "AB1 1AB"
string(8) "AB12 1AB"
于 2013-10-21T13:40:58.887 に答える
0

あなたのコードはスペースを複製しています。あなたの戻り値は「ab1 1ba」ですが、ブラウザには1つしか表示されません。

http://sandbox.onlinephpfunctions.com/code/49a75148d3d5236359776b33a4701789dccd25bf

于 2013-10-21T13:34:29.460 に答える