创建一个 Sequelize findAll where 子句 returns all results regardless of punctuation in search string

Create a Sequelize findAll where clause that returns all results regardless of punctuation in search string

在控制器中,使用 findAll(),我试图创建一个 where 子句来 return 所有命中,而不考虑搜索字符串中的标点符号。目前,即使我使用 [Op.iLike] 运算符,标点符号也决定了 returned 的内容。

示例:

search 可以是 'St Andrew''St. Andrew'

在下面的示例中:如果 search === 'St. Andrew' returns 仅结果为 St. Andrew 而且,如果 search === 'St Andrew',它只会 returns 与 St Andrew

的结果
where: { name: { [Op.iLike]: `%${search}%` } },

在下面的例子中:if search === 'St. Andrew' returns all intended results (results with or without the .) 但是,如果 search === 'St Andrew',它只有 return 没有 .

的结果
const noPunctuationSearch = search?.replace(/[^A-Za-z0-9]+/g, ' ');

where: {
  name: {
    [Op.or]: [
      { [Op.iLike]: `%${search}%` },
      { [Op.iLike]: `%${noPunctuationSearch}%` },
    ],
  },
},

如何设置 where 子句和运算符以 return 所有 St. Andrew || St Andrew 结果而不管 search 中的标点符号?

您可以使用 Op.iRegexp,但您需要对查询进行更多修改以从中创建正则表达式。

const search = 'St. Andrews';

const noPuncuationSearch = search?.replace(/[^A-Za-z0-9]+/g,'[^A-Za-z0-9]+');

where: {
  name: {
    [Op.iRegexp]: noPuncuationSearch,
  },
},