Php 通过mysqli搜索忽略非字母数字字符

Php 通过mysqli搜索忽略非字母数字字符,php,regex,search,mysqli,Php,Regex,Search,Mysqli,在试图找出在mysql数据库(使用php)中使用用户输入的搜索字符串搜索内容的正确方法时遇到了一些问题。。。但我必须使用LIKE和%通配符,并将用户搜索与数据库字段进行比较,忽略任何非字母数字字符。这相当复杂,虽然我在StackOverflow上看到了关于这个主题的其他一些问题,但似乎没有一个答案是有效的 例如,假设我有一个数据库,其中有一个“Aviation”表,其中包含以下内容: MAKE NAME1 NAME2 ----------------

在试图找出在mysql数据库(使用php)中使用用户输入的搜索字符串搜索内容的正确方法时遇到了一些问题。。。但我必须使用LIKE和%通配符,并将用户搜索与数据库字段进行比较,忽略任何非字母数字字符。这相当复杂,虽然我在StackOverflow上看到了关于这个主题的其他一些问题,但似乎没有一个答案是有效的

例如,假设我有一个数据库,其中有一个“Aviation”表,其中包含以下内容:

MAKE               NAME1          NAME2
--------------------------------------------------------
Boeing             B-17G          Flying Fortress
Boeing             F-18E          Super Hornet
Lockheed           F-16C          Viper
Supermarine        Spitfire       Mk IX
McDonnellDouglas   F-18C          Hornet
现在我有一个用户搜索“f18

1) 由于我不知道这是飞机的品牌、名称1还是名称2,而且我也不知道用户是否输入了确切的类型(即f-18c/f18c与f18),我需要让用户输入搜索功能,像通配符一样,在所有三个字段中搜索%f18%。这是一个简单的方法,其中Make类似于“%f18%”,Name1类似于“%f18%”,Name2类似于“%f18%”

2) 虽然这很简单,但问题是在数据库中f18被列为F-18。。。因此,即使是%f18%也找不到匹配的记录。我尝试将Make、Name1和Name2字段作为全文索引进行索引(我读过的全文索引会忽略字母数字字符),但当我使用%f18%这样的搜索时,似乎仍然没有返回任何记录,该搜索应同时返回F-18C Hornet和F-18E Super Hornet匹配。可以使用正则表达式来解决这个问题吗?我可以很容易地从用户输入的搜索中去掉非字母数字字符,以防他们搜索f-18而不是f18,但我必须将它们保存在数据库中

所以问题是,我如何使用mysqli通过LIKE比较来搜索多个字段,并忽略用户输入搜索中的非字母数字字符?这可能吗


谢谢

Hi如果您确定没有在搜索中添加
字母数字
,您可以使用此
查询
这将为您提供所需的
结果

SELECT  * from Aviation where replace(NAME1,'-','')  like '%f18%'  
一旦尝试在
phpmyadmin
中运行它


有关
replace()
的更多信息。请阅读此

您好,如果您确定在搜索中未添加
字母数字
,您可以使用此
查询
这将为您提供所需的
结果

SELECT  * from Aviation where replace(NAME1,'-','')  like '%f18%'  
一旦尝试在
phpmyadmin
中运行它


有关
replace()
的更多信息。请阅读此

如果您要去除非字母数字字符,那么我认为
正则表达式
会起作用。不过,这种方法可能会产生与预期不同的结果。我认为,如果要去除非字母数字字符,那么
like
regex
就可以了。不过,这种方法可能会产生与预期不同的结果。太好了!很好,谢谢你!我希望这个答案能帮助更多的人在这里回答同样的问题。太好了!很好,谢谢你!我希望这个答案能帮助更多的人来这里回答同样的问题。