2013-06-29 41 views
0

我想阻止新用户在他们的用户名和密码中包含apostophes,引号和其他特殊字符,因为我发现这些可能会在路上产生意想不到的问题。与其预测每一个这些问题,我宁愿禁止用户在首先注册时包括这些角色。php filiter删除用户名和密码的特殊字符

网络上有很多问题和东西在如何逃避他们把他们在数据库中,但这不是问题。我只是想抛出一个错误消息,说输入不同的东西。

我曾尝试:

$username = $_POST['username']; 
if (preg_match ("/[&<>%\*\,\.\'\"]/i", $uid)) { 
$strError="Your userid may not contain a special character. Please try again."; 
} 

但这是抛出一个错误没有分隔符发现'''结束。

希望有任何建议。

谢谢。

回答

1

我想你会对此错误办法。不要将特殊字符列入黑名单,而是尝试列入白名单中的字母和数字,例如

$username = $_POST['username']; 
if (!preg_match('/^[\w\d]$/', $uid)) { 
    $strError="Your userid may not contain a special character. Please try again."; 
} 

包括星号和分号:

$username = $_POST['username']; 
if (!preg_match('/^[\w\d\*;]$/', $uid)) { 
    $strError="Your userid may not contain a special character. Please try again."; 
} 
+0

如何添加非特殊字符,如分号,星号等? – user1904273

+0

@ user1904273查看已更新的答案 – n1te

0

的语法高亮显示您的明显的错误:你有一个额外'在这条线:

$username = $_POSt['username']'; 

应该

$username = $_POST['username']; 
+0

这是一个错字。已经修复。错误是由preg-match行 – user1904273

0
if (preg_match('/[^a-zA-Z]+/', $your_string, $matches)) 
{ 
    echo 'Your userid may not contain a special character. Please try again.'; 
} 
else 
{ 
    // No special characters found 
} 
+0

抛出的。你应该解释为什么你的答案是正确的,以及提问者做错了什么。 –

1

简化它...

<?php 
    $username = $_POST["username"]; 
    if (preg_match("/^[A-Za-z0-9_]{3,20}$/", $username)) { 
    // username is valid 
    } 
    else { 
    // it contains special chars 
    } 
?> 

解释regex ...

"/^[ 
A-Z # any uppercase letters 
a-z # any lowercase letters 
0-9 # any digits 
_ # underscore 
]{3,20} # minimum 3 and maximum 20 characters 
$/x" 
0

可能我建议你不要做与preg_match?

php对“净化”字符串有更好的功能 - 例如filter_var - 退房FILTER_SANITIZE_STRING 我建议这个片段

$usernameRaw = trim($_POST['username']); 
$username = filter_var($usernameRaw , FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);