【问题标题】:Double quotes in PHP regular expression?PHP正则表达式中的双引号?
【发布时间】:2015-06-10 03:41:19
【问题描述】:

我对 PHP 非常熟悉,但是我对 PHP 中的正则表达式是全新的。我试图弄清楚如何只允许 az, AZ, 0-9, :, ' (单引号), " " (双引号), +, -, ., (comma), &, !, *, ( , 和)。

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

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

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

$errors = array();

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

我尝试了一切,总能得到:

我正在寻找的一个例子是:你好,这只是我正在寻找的一个例子:\"Hello Wolrd!\"。

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

【问题讨论】:

  • 重新发布您刚刚发布的受骗问题 - 仅允许发布新问题,前提是它是不同的问题。否则,您需要改写原始问题以使其清楚,但首先在此处与回答者讨论为什么他们的答案不适合您。答案中的正则表达式对您有用吗?如果不是,为什么不呢? (此外,删除太多问题会阻止您询问更多问题 - 这就是该网站阻止人们询问和删除太多问题的方式)。如果需要,请编辑您的问题并添加您从答案中尝试过的内容以及为什么它不起作用 - 简洁明了。
  • echo phpversion(); 的输出是什么?如果它是 php.net/manual/en/security.magicquotes.php 并确保你没有启用魔术引号
  • phpversion();是 5.2.17 ......如果我使用它提供的 php 脚本禁用魔术引号并使用下面答案中提供的示例,它允许一切通过......即使是那些未包含在正则表达式中的......如果我没有禁用魔术引号,我得到引号之前的 \
  • 我很困惑。我正在对网站进行自定义编码,我唯一使用 .htaccess 文件的时候是如果我使用了 WordPress 等框架。另外,我无法访问服务器 cPanel,所以我将如何创建一个自定义的 .htaccess 文件。 htaccess 文件专门用于该站点,以便我可以包含 php_flag,以及如何将其包含到 php 页面中,或者我会为此使用“包含”吗?

标签: php regex double-quotes


【解决方案1】:

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

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

请注意,连字符- 放置在结束位置,以免形成范围(它可以匹配文字-)。 +、*、.、( 和 ) 不必在字符类中转义。一般来说,^-] 应该被转义,但如果它们出现在字符类中最终位置的开头,则不必这样做。 \ 必须在字符类中转义,但您不允许这样做。

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

在此处查看demo 和here。

示例 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。

【讨论】:

  • @Matt:如果它适合你,你能接受答案吗?
  • 当我尝试您的示例时,我得到: 我正在寻找的示例是:您好,这只是我正在寻找的示例:\"Hello World!\"。为什么\在“?”前面?
  • 你能澄清一下你在做什么吗?我刚刚为您提供了一个匹配特定脚本子集的字符类,并且正则表达式匹配上面句子中的所有符号,但空格除外。请更新您的帖子。或者最好发布一个新问题,因为这个问题已经得到解答。
  • 如果对你有用,你能接受答案吗? 仅因为答案对 OP 有效并不意味着他必须接受具体答案!有一个很好的帖子:meta.stackexchange.com/q/5234 供 OP 帮助决定。只是重新发布相同的问题不是 SO 的工作原理!这个问题可能需要更多细节和澄清。 (@马特)
  • @Matt:很抱歉造成这种混乱,当有人在一个问题中询问超过 1 件事时,可能会发生这种情况。一个问题是一个允许一些字符的正则表达式,另一个问题是为什么我的返回字符串带有转义引号。我更新了我的答案。
猜你喜欢
  • 2013-10-20
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多