0

我一直在查看有关此主题的所有其他帖子,但我仍然无法让我的正则表达式允许撇号。我认为以下应该有效,但它不断给出错误。它确实允许所有其他字符、数字和字母,只是不允许 ' (我需要它用于像 Mike's 这样的词)

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

谁能告诉我哪里出错了?

4

1 回答 1

2

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

此外,您应该将\-a移到-末尾[]

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

?>
于 2012-09-03T05:52:28.713 回答