2016-06-30 212 views
-2

我已經在我的PHP代碼如何使用的preg_match正確PHP

$u = trim($u); 

    $u = $con->real_escape_string($u); 
    $u = preg_replace('/\s+/', '', $u); 
    $u = str_replace("'", " ", $u); 
    $u = str_replace('"', ' ', $u); 
    $u=htmlspecialchars($u); 
if(preg_match("/[^a-z_\-0-9\']/i", $u)) 
{ 
    echo "<b class='Usernametaken'>Please do not use any symbols</b>"; 
} 

所以它適用於一切在包括AZ,az和0-9之間得到這個if語句,_, - 但我也希望它對於撇號 工作,例如,如果某人的名字是O'reily它不會接受它

+0

現在有什麼問題? – Rizier123

+0

它不適用於撇號@ Rizier123 – Khaleesi

+0

添加\撇號前 –

回答

0

這裏的問題是,你是用空格代替你的報價:

... 
$u = str_replace("'", " ", $u); 
$u = str_replace('"', ' ', $u); 
... 

因此字符串O'reily將被轉換爲O reily。然後它不匹配,因爲你的正則表達式不匹配空格。更換你"\'"只有" "

if(preg_match("/[^a-z_\-0-9 ]/i", $u)) 
{ 
    echo "<b class='Usernametaken'>Please do not use any symbols</b>"; 
} 

只是注意,將雙精度與單引號工作。或者您可以簡單地刪除用空格替換引號的兩行,並且您的原始正則表達式將起作用。