2015-10-13 191 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