正则表达式允许撇号

时间:2012-09-03 00:34:53

标签: php regex

我一直在查看有关此主题的所有其他帖子,但我仍然无法让我的正则表达式允许撇号。我认为以下应该可以工作,但它一直出错。它确实允许所有其他字符,数字和字母,而不是'(我需要像迈克这样的单词)

/^([-a-zA-Z\/\-\&\\\?\!\,\.\'\"\s0-9@:=_]{1,1000})$/

正则表达式是验证表单和以下部分内容所必需的:

public $regex = array ('char' => "/^[a-zA-Z.\s]{0,50}$/", 
                       'misc' => "/^([-a-zA-Z\/\-\&\\\?\!\,\.\'\"\s0-9@:=_]{1,1000})$/");

if(preg_match($this->regex[$validation],$this->filteredValue[$fieldName])) { 
    $this->messageArray[$fieldName] = '<span class="cheers"> &nbsp; Thank You</span>';   
}

有人可以告诉我哪里出错吗?

1 个答案:

答案 0 :(得分:2)

\'应该有效。我不能说为什么不这样做。但是,我可以提供一种解决方法。您可以尝试使用相同字符的十六进制表示替换'。而不是使用\'尝试使用\x1b

另外,您应该将\-移到-

末尾的[]
/^([-a-zA-Z\/\&\\\?\!\,\.\x1b\"\s0-9@:=_-]{1,1000})$/

我不明白开头的-是什么......


编辑: 在看到关于您获得的错误的最后评论后,我只能假设您错误地识别了您所遇到的问题。我认为你的正则表达式都很好,但你的SQL语句中有问题,因为你没有转义数据。

您应该使用mysql_real_escape_string让自己熟悉,并确保在所有查询中使用它。例如:

<?php
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));
mysql_query($query);

?>