场景如下,您将电话号码作为字符串存储在 mongo 中。值可以是以下任何一项:
- 987-654-3210
- 9876543210
- (978) 654-3210
所有这些数字都是相同的。我想使用 RegExp 进行搜索,它基本上会去除所有非字母数字字符的值。使用 987-654-3210 搜索将返回 9876543210,仅此而已。我希望找到一个解决方案,将正则表达式应用于数据库中存储的内容,以匹配我在查询中传递的正则表达式。
最终,如果所有这三个电话号码都在数据库中并且用户使用这三个中的任何一个进行搜索,则应返回所有三个。
最佳答案
您可以使用这 3 个正则表达式来提取 3 个预期组(在您的示例中 987
、654
和 3210
):
- XXX-XXX-XXXX :
/(\d{3})-(\d{3})-(\d{4})/g
- XXXXXXXXX :
/(\d{3})(\d{3})(\d{4})/g
- (XXX) XXX-XXXX :
/\((\d{3})\)\s(\d{3})-(\d{4})/g
<
想法是根据您的输入生成这 3 个组,并从这些组生成三种格式以查找
所有匹配这三种格式中的任何一种的文档:
var input = "987-654-3210"; // or any of the 3 formats
var regex = [];
regex[0] = /(\d{3})-(\d{3})-(\d{4})/g; // 987-654-3210
regex[1] = /(\d{3})(\d{3})(\d{4})/g; // 9876543210
regex[2] = /\((\d{3})\)\s(\d{3})-(\d{4})/g; // (978) 654-3210
function getPhoneNumber(phoneNumber) {
for (key in regex) {
var match = regex[key].exec(phoneNumber);
if (match) {
return match;
}
}
}
var group = getPhoneNumber(input);
var filter = [];
filter[0] = group[1] + "-" + group[2] + "-" + group[3];
filter[1] = group[1] + group[2] + group[3];
filter[2] = "(" + group[1] + ") " + group[2] + "-" + group[3];
db.data.find({
"phoneNumber": {
"$in": filter
}
})
可以直接在mongodb shell中试试
关于javascript - 您如何将正则表达式应用于数据库中的值以在 mongodb 中查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43667593/