2015-10-13 190 views
1

我邮编字符串需要像这样除去非5位拉链:正则表达式从字符串

11111 22222 33333 44444 55555等

如果客户提出在11111,22222,33333, 55555或其他任何不是5个数字(数字)后面或前面有1个可选空间,我希望它删除坏的并留下正确的空间

因此,例如,如果有人放入11111 2222A 33333,它应该只需返回11111 33333,或者如果他们输入11111,22222,333333,则应返回11111 22222 33333.如果他们执行11111,22222,33333,我也想让它正常返回,但我知道如何空格替换逗号我觉得这样我就可以检查seperately

我的正则表达式测试到目前为止已经这些:

$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位数字的东西由空格开头或前面加上空格(可选,因此它与字符串中的第一个邮编和结尾邮编相匹配),无效,有效地将其删除。

但是到目前为止,它所做的只是删除2222A中的A并离开2222.只有一次尝试不会一次被注释掉。

回答

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 
+1

不知道preg_match_all,非常好,正是我想要的。非常感谢。 – DerekConlon