我的邮政编码字符串需要如下所示:
11111 22222 33333 44444 55555等。
如果客户输入11111,22222,333333,5555或其他任何不是5个数字(数字)后面或前面有1个可选空格的东西,我希望它删除坏的并留下正确的空格
所以,例如,如果有人输入11111 2222A 33333,它应该只返回11111 33333,或者如果他们输入11111,22222,333333,它应该返回11111 22222 33333.我还希望它返回正确,如果他们做11111,22222,33333,但我知道如何用空格替换逗号我认为我可以单独检查
到目前为止,我的正则表达式测试是:
$data = '11111 2222A 33333';
// Attempt 1
$x = preg_replace('/^([\s]*\d{5})+[\s]*$/','',$data);
// Attempt 2
$y = preg_replace('/[^\s?(?=\d{5})(?=\s?)*]/','',$data);
$x = preg_replace('/!\d{5}\s?/','',$y);
// Attempt 3
$x = preg_replace('/[^\b\d{5}\b\s]/','',$data);
return $x;
我试图替换那些不匹配5位数后面或前面有空格的东西(可选,因此它匹配字符串中的第一个zipcodes和结尾的zipcodes),没有任何东西,有效地删除它们。
但到目前为止它所做的只是删除2222A中的A并离开2222.一次只会有一次尝试被注释掉。
答案 0 :(得分:1)
我建议使用preg_match_all
,然后选择implode
来电:
$s = '11111, 22222, 33333'
preg_match_all('/\b\d{5}\b/', $s, $m);
echo implode(' ', $m[0]);
//=> 11111 22222 33333
$s = '11111,22222,33333'
preg_match_all('/\b\d{5}\b/', $s, $m);
echo implode(' ', $m[0]);
//=> 11111 22222 33333
$s = '11111,2222A,33333'
preg_match_all('/\b\d{5}\b/', $s, $m);
echo implode(' ', $m[0]);
//=> 11111 33333