LDAP - 查询电话号码,不包括空格字符

问题描述 投票:0回答:2

假设我有一个像这样的 SQL Server 表..

..并且想要搜索包含“345”的电话号码,忽略任何空格。

在 SQL Server 中,这很容易做到:

我的问题是,我想在 LDAP 查询中执行此操作,而 LDAP 查询无法识别 REPLACE 函数。

我们的 Active Directory 中的电话号码经常包含空格(或其他字符),但我不知道如何编写 LDAP 查询来模拟 SQL

REPLACE()
函数。

所以,现在,我的查询可以在所有电话号码中搜索“345”,但这三个字符必须出现在 AD 中,中间没有任何空格。

Select sn,givenName,mobile,telephoneNumber 
From 'LDAP://OurServerName/DC=global,DC=OurCompany,DC=net' 
Where (mobile='*345*' OR telephoneNumber ='*345*' )

有谁知道如何让 LDAP 进行搜索,忽略空格?

我发现了类似的问题,这表明LDAP只是开箱即用地处理这个问题......但从我所看到的来看,它并没有......

(是的,我们希望避免针对 Active Directory 运行脚本来删除所有电话号码中的所有空格。)

顺便说一句,我们公司员工不到 1500 人,所以查询的性能应该不成问题。

search replace ldap
2个回答
0
投票

嗯,就是这样。

TelephoneNumber 和 Mobile 使用电话号码语法 (1.3.6.1.4.1.1466.115.121.1.50),LDAP 实现应遵循 RFC 4517 并使用 TelephoneNumberMatch 和 TelephoneNumberSubstringsMatch 两者来实现“非重要字符处理”。 (即忽略空格、“-”等)按照e.123

据我所知,您需要运行脚本或 ldif out 并解析数字以获得所需的结果。


0
投票

您可以根据需要使用任意数量的星号符号 '*' 来解决该问题。这里我的意思是 两个字符之间恰好有一个 星号(除了开头和结尾)。

注意: 以下 2 个星号不起作用。

您的情况:

Select sn,givenName,mobile,telephoneNumber 
From 'LDAP://OurServerName/DC=global,DC=OurCompany,DC=net' 
Where (mobile='*3*4*5*' OR telephoneNumber ='*3*4*5*' )

JavaScript 方法

const getUsersByPhoneNumber = (phoneNumber) => {
    //...
    const searchDNPhoneNumber = `telephoneNumber=*${phoneNumber.split("")
    .map(character => character + "*")
    .reduce((accumulator, currentCharacter) => accumulator + currentCharacter)}`;
    // Possible result here could be '+*1*2*3*-*4*5*6*-*7*8*'
    //...
    return searchDNPhoneNumber;
}
console.log(getUsersByPhoneNumber("+123-456-789"));

© www.soinside.com 2019 - 2024. All rights reserved.