【问题标题】:In a MySQL query is there anyway to make "o" read as "0" and vice versa?在 MySQL 查询中是否有让“o”读为“0”,反之亦然?
【发布时间】:2015-03-17 17:01:26
【问题描述】:

我不太清楚如何正确解释这一点,但我会尽力而为。我正在使用 ajax 根据文本输入字段过滤某些帖子。然后列出所有帖子,包括用户输入的字母和数字。很基本的东西。

现在,我的客户想要添加“智能搜索”功能。基本上,如果用户输入“0123”,他们希望它列出所有标题包含“0123”和“o123”的帖子。 “s”和“5”也需要发生同样的事情。因此,如果用户键入“1234s”,它将列出所有包含“1234s”和“12345”的帖子。有没有办法做到这一点?

这是我目前所拥有的,numberchar 是文本输入的名称

$categoryparentfilter = "SELECT ID FROM `wp_posts` WHERE `post_title` LIKE '".trim($_POST['numberchar'])."%' order by ID desc";

【问题讨论】:

  • 这可能会变得很棘手,有很多可能性。您是否还要考虑 1 看起来像“I”或小写字母“L”,8 看起来像“B”,6 看起来像“G”,2 看起来像“Z”?如果是这样,“0123”可能是“o123”,或“0l23”或“ol23”或“o1z3”......等等。它可以做到,但是神圣的IF语句蝙蝠侠!

标签: php mysql wordpress


【解决方案1】:

str_replace()

// Replace "o" with "0"
$numberchar = str_replace("o", "0", trim($_POST['numberchar']));
$categoryparentfilter = "SELECT ID FROM `wp_posts` WHERE `post_title` LIKE '". $numberchar ."%' order by ID desc";

【讨论】:

    【解决方案2】:

    你可以使用 MySQL 的 REPLACE 或 PHP 的 str_replace

    您可以在查询本身中使用 MySQL 的 REPLACE 函数到 replace characters

    REPLACE('queryStringArgument', 'o', '0')
    

    如果你想在服务器上做,你也可以使用 PHP 的str_replace

    $numberchar = isset($_POST['numberchar']) ? $_POST['numberchar'] : ""; // Get the POSTed value if it's set.
    $fixedNumberchar = str_replace("o", "0", $numberchar);
    $categoryparentfilter = "SELECT ID FROM `wp_posts` WHERE `post_title` LIKE '". $fixedNumberchar ."%' order by ID desc";
    

    注意

    你这可能不是个好主意;您应该捕获无效参数并通知用户他做错了什么。但这由您决定。

    【讨论】:

      【解决方案3】:

      您需要将其更改为:

      $categoryparentfilter = "SELECT ID FROM `wp_posts` WHERE REPLACE(`post_title`,'[a-zA-z]+','') LIKE '%".trim(preg_replace("[^0-9]","", $_POST['numberchar']))."%' order by ID desc";
      

      去除所有字符,只允许数字,在开头添加 % 广告将允许 o1234

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-29
        • 2014-05-11
        • 2017-02-05
        • 1970-01-01
        • 2019-12-27
        • 2012-01-03
        相关资源
        最近更新 更多