创建一个 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,
},
},
在控制器中,使用 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,
},
},