douxiao0400 2015-07-30 20:50
浏览 173
已采纳

PHP - 使用数据库搜索字符串LIKE语法/通配符(%,_)[重复]

This question already has an answer here:

I have an application receiving search requests using the syntax of a database LIKE notation (ex: %someth_ng%), but I must be able to apply this search not only to a database (which is straightforward), but to strings in my application, which is in PHP.

I'm thinking that using a regex is probably the best way to do this, but I'd like to see what solutions other people can/have come up with.

</div>
  • 写回答

1条回答 默认 最新

  • dsgni26260 2015-07-30 20:50
    关注

    After a bit of work, this is the best I could come up with:

    public function like($needle, $haystack)
    {
        // Escape meta-characters from the string so that they don't gain special significance in the regex
        $needle = preg_quote($needle, '~');
    
        // Replace SQL wildcards with regex wildcards
        $needle = str_replace('%', '.*', $needle);
        $needle = str_replace('_', '.', $needle);
    
        // Add delimiters, modifiers and beginning + end of line
        $needle = '~^' . $needle . '$~isu';
    
        return (bool) preg_match($needle, $haystack);
    }
    

    I'm curious to see if there are any better solutions, or improvements to this one.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀