2012-01-20 95 views
0

我用preg_match允許字母和數字輸入,刪除任何不是字母或數字的字母?

if(!preg_match('/^[a-zA-Z0-9]+$/', $file_rename)) 
{ 
$error = true; 
echo '<error elementid="file_rename" message="FILE - please use alphabets and numbers only" />'; 
} 

如果我想刪除任何英文字母不是一個字母或數字?

例如,

test_1 

test 1 

,或者

test&2 

test 2 
+2

而不是「刪除」,你的意思是「用空格替換」?怎麼樣多次出現?它們全部被替換爲每個空間還是被壓縮爲單個空間替換? – Phil

+0

對不起,我的意思是「用空格替換」謝謝。所以'test _&_ 1'應該被替換爲'test 1',然後我將用一個空格替換多個空格'preg_replace('/ \ s \ s + /','',$ string)' – laukok

+0

[Regex to match除了字母和數字以外的所有字符](http://stackoverflow.com/questions/2167145/regex-to-match-all-characters-except-letters-and-numbers) – mario

回答

3

起初,我想這個(統一安全)去

$newString = preg_replace('/[^\p{L}\p{N}]/u', ' ', $oldString); 

如果你要離開現有的孤獨,多個空格...

$newString = preg_replace('/[^\p{L}\p{N}\s]/u', ' ', $oldString); 

如果要壓縮連續的非字母數字字符轉換成一個空格,將其更改爲

$newString = preg_replace('/[^\p{L}\p{N}]+/u', ' ', $oldString); 
// note the + sign 
+0

+1 ... ...不能爭辯與不可能詳盡的答案:) – rdlowrey

+0

謝謝你的答案,菲爾。 – laukok

5

PHP preg_replacedocs是你在找什麼:

$str = preg_replace('/[^a-z0-9]/i', ' ', $str); 

請注意i修飾符在正則表達式的末尾 - 它使搜索不區分大小寫。如果你不介意下劃線,你可以選擇:

$str = preg_replace('/[^\w]/', ' ', $str); 
+0

感謝您的回答,rdlowrey! :-) – laukok