Regex表达式允许使用撇号


Regex expression to allow an apostrophe

我已经看了关于这个主题的所有其他帖子,但我仍然无法获得允许使用撇号的正则表达式。我原以为以下内容应该有效,但它总是出错。它确实允许所有其他字符、数字和字母,只是不允许'(我需要它来表示像Mike的单词)

/^([-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>';   
}

有人能告诉我哪里出了问题吗?

''应该可以工作。我说不出为什么没有。不过,我可以提供一个变通办法。您可以尝试将'替换为相同字符的十六进制表示。尝试使用CCD_ 4而不是使用''

此外,您应该将'-移动为[] 末尾的-

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

我不明白-一开始是什么…


编辑:在看到你对错误的最后评论后,我只能假设你已经错误地识别了你的问题。就我所见,假设您的regexp一切正常,但您的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);
?>