[我有一个包含旅馆的表。旅馆名称之一是d'spa。我已经实现了名称搜索。因此,如果用户搜索d'spa,他会找到合适的旅馆。
现在,如果用户搜索d.spa,d-spa或dspa,则用户应该找到正确的酒店d'spa
我的knexjs查询(不提供餐饮特殊字符问题:]
hotel = "d'spa"
knex.select('*').from('hotels').where({name:hotel})
我希望得到相同的结果
hotel = "d-spa"
//or hotel = "d.spa"
//or hotel = "dspa"
您可以在SQL请求中使用正则表达式匹配,并用.?
替换酒店名称中的所有非字母数字字符。
?表示重复上一个项目零或一次。
例如:
const hotelMatch = hotel.replace(/[\W]+/g, '.?')
然后执行regex request请求:
knex.select('*').from('hotels').where(knex.raw(`name SIMILAR TO ?`, [hotelMatch]))
/!\我没有测试代码,它只是一个示例/!\