我班上有以下功能。
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"
如果只是通过函数返回字符串,可能会导致字符串长度变大?
答案 0 :(得分: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"
答案 1 :(得分:1)
说明:
你的if条件是否返回8个字符串
substr($string, $start, $length)
所以,当你输入“ab1 1ab”
时in if condition
1)substr($postcode, 0, 4) return "ab1 " <=== first space comes from here
2)then you appends space <=== another one from here
然后
3)substr($postcode, 4, 3) appends "1ab"
他们一起返回“ab1 1ab”&lt; ===两个空格
答案 2 :(得分:0)
您的代码复制了空格,您的返回值为“ab1 1ba”,但浏览器只显示一个。
http://sandbox.onlinephpfunctions.com/code/49a75148d3d5236359776b33a4701789dccd25bf