2011-08-14 78 views
14

我有一個preg_replace問題。我需要一個函數,將所有字符轉換爲除了[A-z][0-9]和一些. ! ?帶有preg_replace的PHP過濾器只允許使用字母

我可以做一個preg_match,但這隻能驗證,我想被替換。這不用於在說明META標籤中放置垃圾字符,如 <p>;[[;[p;[

所以劇本一定要像:

;")<br>kk23?! => brkk23?!

任何幫助,將不勝感激:d

+0

我知道如何使用preg_match ...我真的不適合用preg_replace來過濾數據 – Master345

+0

這怎麼可能?編寫與字符串匹配的preg_match調用。將函數名稱中的'match'改爲'replace'。添加第二個參數,它是一個空字符串,你想用什麼來替換匹配的字符。田田,你用過preg_replace! –

回答

34
$string = ';")<br>kk23?!'; 
$new_string = preg_replace("/[^A-Za-z0-9?!]/",'',$string); 
echo $new_string; 

免洗字母,數字,空格?!

/* 3 choices. Pick one you like! */ 
$str = preg_replace("/[^A-Za-z0-9?! ]/","",$str); 
$str = preg_replace("/[^A-Za-z0-9?!\s]/","",$str); 
$str = preg_replace("/[^A-Za-z0-9?![:space:]]/","",$str); 
+5

'ereg_replace()'已棄用..'preg_replace()'會更好。 – Floern

+1

Thanks Floern。增加了幾個解決方案。 – dang

+0

這很好用:D謝謝 – Master345

6
$var=preg_replace('~[^A-Za-z0-9?.!]~','',$var); 

不要忘記A-Za-zA-z不相同

+0

你忘了分隔符。 –

+0

@fireeyedboy,哦,你是對的 – RiaD

+0

@RiaD'A-Za-z'和'A-z'有什麼區別? – qwerty

1

最簡單的方法是隻做類似於: 只需在之後添加字符,如果需要的話一定要逃脫它們。

$string = "<br>kk23?!"; 
$string = preg_replace('/[^A-Za-z0-9 \?!]/', '', $string); 
+0

Warning:preg_replace():未知修飾符'g' –

0

更多訪問此頁面。我認爲更多的人得到同樣的問題。更好的方法是嘗試自我,得到你所需要的東西。定製你的還是複製粘貼此PHP和嘗試:

$sample_input = '&&*9?><<script>}cat-<html>ch(_P.,,mE.:;xc##e*p32t.ion $e){di+-($e->ge69tMesPHP _f0sage()3);}'; 

$output = ereg_replace("[^..........]", "", $sample_input);   

echo "validate =".$output; 

修改通過填寫此得到你想要的東西:

$output = ereg_replace("[^.........]", "", $sample_input); 

例如:如果你只想小寫那麼這樣做:

$output = ereg_replace("[^a-z]", $sample_input); 

下殼體以空格:

$output = ereg_replace("[^a-z ]", $sample_input); 

多....., 這是一個簡單的驗證方法:

$username = ereg_replace("[^A-Z0-9_]", "", $username); 
$fullname = ereg_replace("[^A-Za-z0-9., ]", "", $fullname); 
$city  = ereg_replace("[^A-Za-z -]", "", $city); 
$phone = ereg_replace("[^0-9 +()-]", "", $phone); 
$state = ereg_replace("[^A-Za-z -]", "", $state); 
$zipcode = ereg_replace("[^0-9]", "", $zipcode); 
$country = ereg_replace("[^A-Za-z -]", "", $country); 
$gender = ereg_replace("[^mf]", "", $gender); 

自己嘗試,希望可以幫助...

1

一個快速的解決方案將是如下也是:

if (preg_match('/^[\w\.]+$/', $str)) { 
    echo 'Str is valid'; 
} else 
    echo 'Str is invalid'; 

//串只包含A到Z,A到Z,0到9和_(下劃線)

\w - matches [a-zA-Z0-9_]+ 

希望它有幫助。