我写了一段代码,接受用户的输入并将其插入数据库。 HTML代码如下:
<td align="center"><textarea class="txt" required=required rows="3" name="Xschool" cols="30"></textarea></td>
我需要检查数据是否有任何特殊符号。我使用了正则表达式,如下所示:
$Xschool=$_POST['Xschool'];
$pattern = '/[A-Z ]+$/';
$Xschool=strtoupper($Xschool);
if(!preg_match($pattern,$Xschool))
{
echo "<pre>We are sorry. The X School ".$Xschool." is invalid. Make sure your name contains no special symbols/numbers.</pre>";
exit;
}
此代码适用于多种类型的输入,但不适用于输入ST MARY'S
。当遇到'符号时,代码不能正常工作。我该怎么做才能克服这个问题?请帮我!!提前谢谢。
答案 0 :(得分:1)
更改模式以满足您的需求。为此,您首先需要非常清楚地了解您的需求。 '/[A-Z ]+$/'
无法满足您的需求; '/[A-Z\' ]+$/'
会满足您的需求吗?口音怎么样?拉丁字母以外的字符怎么样?为自己回答这些问题,然后根据您的答案设计正则表达式或其他验证算法。
答案 1 :(得分:1)
你的基本理解有问题。
/ [A-Z] + $ /
将匹配任何包含以A-Z或空格结尾的行的字符串。
我建议您要:
if(preg_match('/[^A-Z ]/', $Xschool))
{
...
}
将匹配任何包含非A-Z或空格的字符串的字符串。
答案 2 :(得分:0)
只需在比赛中加入'
即可 $Xschool=$_POST['Xschool'];
$pattern = "/[A-Z ']+$/";
$Xschool=strtoupper($Xschool);
if(!preg_match($pattern,$Xschool))
{
echo "<pre>We are sorry. The X School ".$Xschool." is invalid. Make sure your name contains no special symbols/numbers.</pre>";
exit;
}
答案 3 :(得分:0)
试试这个正则表达式。
[a-zA-Z0-9\'\s]{0,50}
这将允许小&amp;大写字母和0到9位数,最多50个名字。
如果您只想使用大写字母。
[A-Z\'\s]{0,50}
答案 4 :(得分:0)
试试这个
$Xschool=$_POST['Xschool'];
$pattern = '/^[a-zA-Z][a-zA-Z ]*$/';
$Xschool=strtoupper($Xschool);
if(!preg_match($pattern,$Xschool))
{
echo "<pre>We are sorry. The X School ".$Xschool." is invalid. Make sure your name contains no special symbols/numbers.</pre>";
exit;
}
答案 5 :(得分:0)
您的模式/[A-Z ]+$/
不包含起始锚。这意味着当您尝试将其与ST MARY'S
匹配时,它会与结尾S
匹配,并且您的代码看不到任何错误。将模式更改为/^[A-Z ]+$/
将解决该问题。
但是,根据您的评论,您有一个更大的问题 - 您盲目地将用户输入传递给SQL查询而不对其进行清理,这意味着您容易受到 SQL injection attacks的攻击。 Learn the right way to defend against these attacks而不是像这个正则表达式那样提出被误导的绑匪。
答案 6 :(得分:0)
另一种方法:
在你的场景中替换所有有效字符A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S, T,U,V,W,X,Y,Z,SPACE和任何其他没有“”的VALID字符。然后,如果剩余的字符串的长度> 0表示必须存在其他一些INVALID字符。
<?php
function isStringOnlyAZSPACE($the_string)
{
$valid_chars = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',' ');
$the_string = str_replace($valid_chars, "", $the_string);
return (strlen($the_string)==0);
}
echo isStringOnlyAZSPACE("ST MARY'S")?"true":"false"; // FALSE
echo isStringOnlyAZSPACE("ST MARYS")?"true":"false"; // TRUE
?>
我还必须在你的问题中重复@DCoder的评论“这绝对是避免SQL错误的错误方法。”