【问题标题】:Regexp and variable正则表达式和变量
【发布时间】:2012-03-14 17:42:08
【问题描述】:

我有这个表格,它输出一些字母和一个字长。但是我在从数据库中获取正确的输出时遇到了一些问题。

   if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        $letters = mysql_real_escape_string($_POST['letters']);
        $length = mysql_real_escape_string($_POST['length']);
        echo "Letters: $letters";
        echo "Lengte: $length";
        $res=mysql_query("SELECT word FROM words WHERE word REGEXP '[$letters]{$length}' ")
         or die ('Error: '.mysql_error ());
        while ($row=mysql_fetch_array($res)){
            echo $row['word'];
            echo "<br />";
        }
     }
     else {
         echo "Foutje";
     }

如果我将 $length 更改为由我的脚本工作的表单输入的整数。复制/粘贴 [$letters] 6 次也可以。我猜引号有问题,但我完全不知道它到底是什么。

谁能看到我做错了什么? 谢谢。

【问题讨论】:

  • 确保输入不会破坏正则表达式模式。

标签: php mysql regex


【解决方案1】:

{} 被 PHP 解释为内部变量的分隔符,因为您使用的是双引号字符串。用串联改变你的引用:

$res=mysql_query("SELECT word FROM words WHERE word REGEXP '[" . $letters . "]{" . $length ."}'")

或者将双引号字符串中的 {} 加倍,以便将外部对解释为文字。

$res=mysql_query("SELECT word FROM words WHERE word REGEXP '[$letters]{{$length}}' ")

注意,您还应该验证$length 包含一个正整数。

if (!ctype_digit($length)) {
  // error - length must be an int
}

【讨论】:

  • 最后一个做到了。谢谢,我完全忘记了那个选项!
【解决方案2】:

尝试这样做:

res=mysql_query("SELECT word FROM words WHERE word REGEXP '[".$letters."]{".$length."}' ")

我有一种预感,$ 正在被解释为正则表达式的一部分

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 2023-03-04
    • 1970-01-01
    • 2015-07-06
    • 2017-10-24
    相关资源
    最近更新 更多