PHP正则表达式中的双引号?

时间:2015-04-05 16:25:06

标签: php regex double-quotes

我对PHP非常熟悉,但我在PHP中使用正则表达式是全新的。我想弄清楚如何只允许az,AZ,0-9,:,'(单引号),“”(双引号),+, - ,。,(逗号),&,!,*, (,和)。

我找到了几个我正在寻找的工作示例,除了如何允许单引号和双引号。

我正在寻找的一个例子是: 您好,这只是我要找的一个例子:“Hello World!”。

我正在尝试使用以下方法验证textarea $ _POST ['suggestion']:

$errors = array();

if(!preg_match('insert regular expression',$_POST['suggestion'])){
    $errors['suggestion2'] = "Invalid";
}

我所尝试的一切,我总是得到:

我正在寻找的一个例子是:您好,这只是我要找的一个例子:\“Hello Wolrd!\”。

我不明白为什么\在引号前面?

1 个答案:

答案 0 :(得分:3)

您可以使用以下正则表达式:

[a-zA-Z0-9:'"+.,&!*()-]

请注意,连字符-位于结束位置,以便不形成范围(并且它可以与文字-匹配)。 +*.()不必在字符类中进行转义。通常,^-]应该被转义,但如果它们出现在角色类的最终位置的开头,则它们不必。 \必须在字符类中进行转义,但您不允许它。

此外,如果要匹配允许符号的块,请在字符类之后添加+量词:[a-zA-Z0-9:'"+.,&!*()-]+

在此处查看demohere

示例PHP代码:

$re = "/[a-zA-Z0-9:'\"+.,&!*()-]/"; 
$str = "a-zA-Z0-9:'\"+.,&!*()-"; 
preg_match_all($re, $str, $matches);

修改

自更新问题以来,这里是早期PHP版本中的information to turn off escaping double quotes。作为其中一个选项,您可以转到 .htaccess 文件并设置php_flag magic_quotes_gpc Off