2012-03-27 102 views
3

假設輸入字符串+123-321+123 345,使用PHP的正則表達式函數我想刪除所有非數字([^\d])字符,除了開頭的+字符。 +可能存在也可能不存在,所以給定字符串123-321+123 345的結果應該是相同的(123321123345)。preg_replace所有非數字字符,除了字符串開始處的+以外

目前解決方法是檢查+,然後運行preg_replace('/[^\d]+/', '', $string),但我確定必須有一個純正則表達式解決此問題。

謝謝!

回答

5

試試這個

/(?<!^)\D|^[^+\d]/ 

\D[^\d]

(?<!^)同樣是負回顧後,確保不存在的字符串不是一個數字之前開始。

該表達式將匹配不是字符串開頭的所有非數字。

preg_replace('/(?<!^)\D|^[^+\d]/', '', $string) 
+0

謝謝stema這幾乎是完美的,但它允許在開始時使用_any_非數字字符。我只想讓'+',其他任何東西都應該被刪除。任何方式來修改你的模式呢? – krixon 2012-03-27 08:14:25

+0

我更新了我的答案。我添加了一個替換,它將匹配不是加號或數字的起始字符。 – stema 2012-03-27 08:17:44

+0

完美,謝謝你的幫助。對不起,我太高興了,但我已經接受了答案。 – krixon 2012-03-27 08:20:12

0

使用積極lookbehind。

preg_replace('/(?<=\d)[^\d]+/', '', $string) 
+0

你說得對,更正了我的答案。 – socha23 2012-03-27 08:10:13

相關問題